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面向对象编程
Mar 02 Javascript
javascript removeChild 使用注意事项
Apr 11 Javascript
JS实现简单的图书馆享元模式实例
Jun 30 Javascript
JS遍历数组及打印数组实例分析
Jan 21 Javascript
分享我对JS插件开发的一些感想和心得
Feb 04 Javascript
Jquery操作cookie记住用户名
Mar 29 Javascript
如何理解jQuery中的ajaxSubmit方法
Mar 13 Javascript
认识less和webstrom的less配置方法
Aug 02 Javascript
JavaScript实现简单评论功能
Aug 17 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
Mar 01 Javascript
Vue实现验证码功能
Dec 03 Javascript
微信小程序实现多选框功能的实例代码
Jun 24 Javascript
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获取百度收录、百度热词及百度快照的方法
2015/04/02 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
2013/05/19 Javascript
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
js正则表达式的使用详解
2013/07/09 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
2014/01/24 Javascript
js 本地预览的简单实现方法
2014/02/18 Javascript
js创建对象的方式总结
2015/01/10 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
温习Javascript基础语法之词法结构
2016/05/31 Javascript
js canvas仿支付宝芝麻信用分仪表盘
2016/11/16 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
Python数据类型详解(四)字典:dict
2016/05/12 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
2018/04/10 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
Pipenv一键搭建python虚拟环境的方法
2018/05/22 Python
python 将md5转为16字节的方法
2018/05/29 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
Python协程 yield与协程greenlet简单用法示例
2019/11/22 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
使用Html5中的cavas画一面国旗
2019/09/25 HTML / CSS
英国著名书店:Foyles
2018/12/01 全球购物
分厂厂长岗位职责
2013/12/29 职场文书
个人合伙协议书范本
2014/10/14 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
离婚起诉书范本
2015/05/18 职场文书
消防演习感想
2015/08/10 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python