JS查找字符串中出现次数最多的字符


Posted in Javascript onSeptember 05, 2016

在一个字符串中,如 'zhaochucichuzuiduodezifu',我们要找出出现最多的字符。本文章将详细说明方法思路。

先介绍两个string对象中的两个方法:indexOf()和charAt()方法

indexOf()方法介绍

返回某个指定的字符串值在字符串中首次出现的位置

JS查找字符串中出现次数最多的字符

charAt()方法介绍

返回某个指定位置的字符

JS查找字符串中出现次数最多的字符

先做一个小测试,找到字符串'woainixiaoli'中的每一个'i'出现的位置。

<script>
var arr = 'woainixiaoli';
var index = -1; //定义变量index控制索引值
//当查找不到a,即indexOf()的值为-1时,结束循环
do {
index = arr.indexOf("i", index + 1); //使用第二个参数index+1,控制每一次查找都是从上一次查找到字符a的下一个索引位置开始
if (index != -1) { //可以找到字符i
console.log(index); //输出a的位置
}
} while (index != -1);
</script>

以上代码运行后再控制台输出的是

JS查找字符串中出现次数最多的字符

进入正题,求字符串'zhaochucichuzuiduodezifu'最多的字符

方法一:用数组(存在缺点,当出现最多的字符不只一个时,只能找到一个)

<script>
var str = "zhaochucichuzuiduodezifu";
var arr = [];//定义一个新数组
//循环遍历字符串
for (var i = 0, length = str.length; i < length; i++) {
var index = -1;
var j = 0;
//找每一个字符
do {
index = str.indexOf(str[i], index + 1);
if (index != -1) {
j++;
}
}while (index != -1);
arr[j] = str[i]; //把字符串str中的字符赋给数组arr索引为j的数据,当多次循环后,会出现重复赋值的现象,









//后赋值的会把之前的赋值覆盖掉,但不影响我们找出字符出现最多的那个
}
console.log(arr);
console.log("最多的字符是" + arr[arr.length - 1]);
console.log("次数是" + (arr.length - 1));
</script>

以上代码运行后再控制台输出的结果如下图:

JS查找字符串中出现次数最多的字符

从输出的数组arr中也可以看出,此方法会把次数相同的字符覆盖,只能显示出一个。若有2个字符出现出现相同的最高次数,此方法只能得出一个。基于此,参照下一个用对象来解决的方法。

方法二:用对象(推荐使用)

<script>
var str = "zhaochucichuzuiduodezifu";
var o = {};
for (var i = 0, length = str.length; i < length; i++) {
// var char = str[i];
var char = str.charAt(i);
if (o[char]) { //char就是对象o的一个属性,o[char]是属性值,o[char]控制出现的次数
o[char]++; //次数加1
} else {
o[char] = 1; //若第一次出现,次数记为1
}
}
console.log(o); //输出的是完整的对象,记录着每一个字符及其出现的次数
//遍历对象,找到出现次数最多的字符和次数
var max = 0;
var maxChar = null;
for (var key in o) {
if (max < o[key]) {
max = o[key]; //max始终储存次数最大的那个
maxChar = key; //那么对应的字符就是当前的key
}
}
console.log("最多的字符是" + maxChar);
console.log("出现的次数是" + max);
</script>

以上代码运行后再控制台输出的结果如下图:

JS查找字符串中出现次数最多的字符

此方法解决了方法一的问题,而且每一个字符我们都可以清楚的记录出现的次数,当有两个次数相同的字符时,可以在对象中清楚的看到。

不过还是存在不足,不能直接把次数最高的字符同时输出,这还需要加额外的判断条件。完美的代码如下哈O(∩_∩)O

<script>
var str = "nininihaoa";
var o = {};
for (var i = 0, length = str.length; i < length; i++) {
var char = str.charAt(i);
if (o[char]) {
o[char]++; //次数加1
} else {
o[char] = 1; //若第一次出现,次数记为1
}
}
console.log(o); //输出的是完整的对象,记录着每一个字符及其出现的次数
//遍历对象,找到出现次数最多的字符的次数
var max = 0;
for (var key in o) {
if (max < o[key]) {
max = o[key]; //max始终储存次数最大的那个
}
}
for (var key in o) {
if (o[key] == max) {
//console.log(key);
console.log("最多的字符是" + key);
console.log("出现的次数是" + max);
}
} 
</script>

结果如下:

JS查找字符串中出现次数最多的字符

以上所述是小编给大家介绍的JS查找字符串中出现次数最多的字符,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript 伪数组实现方法
Oct 11 Javascript
javascript跑马灯悬停放大效果实现代码
Dec 12 Javascript
浅析jQuery中常用的元素查找方法总结
Jul 04 Javascript
javascript递归回溯法解八皇后问题
Apr 22 Javascript
php结合imgareaselect实现图片裁剪
Jul 05 Javascript
Javascript实现苹果悬浮虚拟按钮
Apr 10 Javascript
jQuery实现微信长按识别二维码功能
Aug 26 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
Oct 11 Javascript
javascript设置文本框光标的方法实例小结
Nov 04 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
Apr 25 Javascript
在vue中使用SockJS实现webSocket通信的过程
Aug 29 Javascript
Vue3中toRef与toRefs的区别
Mar 24 Vue.js
node网页分段渲染详解
Sep 05 #Javascript
js对象浅拷贝和深拷贝详解
Sep 05 #Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
Sep 04 #Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
Sep 04 #Javascript
angularjs实现文字上下无缝滚动特效代码
Sep 04 #Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
Sep 04 #Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
Sep 04 #Javascript
You might like
据说是雅虎的一份PHP面试题附答案
2009/01/07 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
css把超出的部分显示为省略号的方法兼容火狐
2008/07/23 Javascript
jQuery 选择器项目实例分析及实现代码
2012/12/28 Javascript
jQuery操作checkbox选择(list/table)
2013/04/07 Javascript
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
不得不分享的JavaScript常用方法函数集(下)
2015/12/25 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
js实现字符全排列算法的简单方法
2017/05/01 Javascript
原生js封装添加class,删除class的实例
2017/11/06 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
2017/12/01 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
JS实现密码框效果
2020/09/10 Javascript
Python检测网站链接是否已存在
2016/04/07 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
Python getsizeof()和getsize()区分详解
2020/11/20 Python
欧舒丹美国官网:L’Occitane美国
2018/02/23 全球购物
J2EE系统只能是基于web
2015/09/08 面试题
正规的求职信范文分享
2013/12/11 职场文书
无故旷工检讨书
2014/01/26 职场文书
遗嘱继承公证书
2014/04/09 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
会计简历自我评价
2015/03/10 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
读《钢铁是怎样炼成的》有感:百炼方成钢
2019/11/05 职场文书
Spring Data JPA框架自定义Repository接口
2022/04/28 Java/Android