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 文字符串转换unicode编码函数
May 30 Javascript
js读写json文件实例代码
Oct 21 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
Mar 26 Javascript
JavaScript实现广告的关闭与显示效果实例
Jul 02 Javascript
js数组去重的方法汇总
Jul 29 Javascript
JavaScript数组方法总结分析
May 06 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
Apr 28 jQuery
Vue动态组件实例解析
Aug 20 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
Dec 27 Javascript
react中实现搜索结果中关键词高亮显示
Jul 31 Javascript
vue点击自增和求和的实例代码
Nov 06 Javascript
ant design 日期格式化的实现
Oct 27 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 服务器配置(使用Apache及IIS两种方法)
2009/06/01 PHP
第四章 php数学运算
2011/12/30 PHP
PHP测试程序运行时间的类
2012/02/05 PHP
二行代码解决全部网页木马
2008/03/28 Javascript
JS的参数传递示例介绍
2014/02/08 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
JS控制层作圆周运动的方法
2016/06/20 Javascript
js中使用使用原型(prototype)定义方法的好处详解
2016/07/04 Javascript
JavaScript中localStorage对象存储方式实例分析
2017/01/12 Javascript
微信小程序中hidden不生效原因的解决办法
2017/04/26 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
Express进阶之log4js实用入门指南
2018/02/10 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
浅谈pytorch和Numpy的区别以及相互转换方法
2018/07/26 Python
python3去掉string中的标点符号方法
2019/01/22 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
Python批量启动多线程代码实例
2020/02/18 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
Under Armour安德玛荷兰官网:美国高端运动科技品牌
2019/07/10 全球购物
计算机科学与技术应届生求职信
2013/11/07 职场文书
总经理任命书
2014/03/29 职场文书
社区维稳工作方案
2014/06/06 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
MySQL中VARCHAR与CHAR格式数据的区别
2021/05/26 MySQL
Golang 对es的操作实例
2022/04/20 Golang
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle
Meta增速拉垮,元宇宙难当重任
2022/04/29 数码科技