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 相关文章推荐
任意位置显示html菜单
Feb 01 Javascript
IE bug table元素的innerHTML
Jan 11 Javascript
jquery 无限级联菜单案例分享
Mar 26 Javascript
node.js中的fs.lstatSync方法使用说明
Dec 16 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
Aug 18 Javascript
javascript+css3 实现动态按钮菜单特效
Feb 06 Javascript
手机图片预览插件photoswipe.js使用总结
Aug 25 Javascript
vue.js element-ui tree树形控件改iview的方法
Mar 29 Javascript
vue2.0 下拉框默认标题设置方法
Aug 22 Javascript
JavaScript实现简单音乐播放器
Apr 17 Javascript
详解服务端预渲染之Nuxt(介绍篇)
Apr 07 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
Nov 13 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
一个图形显示IP的PHP程序代码
2007/10/19 PHP
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
cookie.js 加载顺序问题怎么才有效
2013/07/31 Javascript
使用AngularJS创建自定义的过滤器的方法
2015/06/18 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
javascript事件处理模型实例说明
2016/05/31 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
React如何将组件渲染到指定DOM节点详解
2017/09/08 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
认识jQuery的Promise的具体使用方法
2017/10/10 jQuery
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
python实现定制交互式命令行的方法
2014/07/03 Python
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
2015/04/25 Python
自己编程中遇到的Python错误和解决方法汇总整理
2015/06/03 Python
Python 专题一 函数的基础知识
2017/03/16 Python
python list排序的两种方法及实例讲解
2017/03/20 Python
Python 的类、继承和多态详解
2017/07/16 Python
python中验证码连通域分割的方法详解
2018/06/04 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
2018/10/26 Python
Windows系统Python直接调用C++ DLL的方法
2019/08/01 Python
opencv resize图片为正方形尺寸的实现方法
2019/12/26 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
Wiggle美国:英国骑行、跑步、游泳、铁人三项商店
2018/10/27 全球购物
护士辞职信模板
2014/01/20 职场文书
我为自己代言广告词
2014/03/18 职场文书
故意伤害人身损害赔偿协议书
2014/11/19 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书
pytorch 一行代码查看网络参数总量的实现
2021/05/12 Python