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 相关文章推荐
js form action动态修改方法
Nov 04 Javascript
jquery导航制件jquery鼠标经过变色效果示例
Dec 05 Javascript
JQuery仿小米手机抢购页面倒计时效果
Dec 16 Javascript
Jquery中CSS选择器用法分析
Feb 10 Javascript
Js数组排序函数sort()介绍
Jun 08 Javascript
jquery实现放大镜简洁代码(推荐)
Jun 08 jQuery
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
Oct 26 Javascript
对vue里函数的调用顺序介绍
Mar 17 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
Apr 02 Javascript
mui js控制开关状态、修改switch开关的值方法
Sep 03 Javascript
浅谈微信小程序列表埋点曝光指南
Oct 15 Javascript
JS创建自定义对象的六种方法总结
Dec 15 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使用反射插入对象示例分享
2014/03/11 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
js 操作css实现代码
2009/06/11 Javascript
XMLHTTPRequest的属性和方法简介
2010/11/23 Javascript
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
浅析jquery的作用与优势
2013/12/02 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
vue操作下拉选择器获取选择的数据的id方法
2018/08/24 Javascript
从vue源码看props的用法
2019/01/09 Javascript
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
Python中的变量和作用域详解
2016/07/13 Python
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
python实现简单神经网络算法
2018/03/10 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
python路径的写法及目录的获取方式
2019/12/26 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
python删除某个目录文件夹的方法
2020/05/26 Python
HTML5利用约束验证API来检查表单的输入数据的代码实例
2016/12/20 HTML / CSS
LORAC官网:美国彩妆品牌
2019/08/27 全球购物
实习自荐信
2013/10/13 职场文书
大学生求职简历的自我评价
2013/10/14 职场文书
打架检讨书500字
2014/01/29 职场文书
项目合作意向书范本
2014/04/01 职场文书
心得体会的写法
2014/09/05 职场文书
婚育证明格式
2015/06/17 职场文书
2016党员发展对象培训心得体会
2016/01/08 职场文书
创业计划书之美甲店
2019/09/20 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL