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 相关文章推荐
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
Sep 03 Javascript
JS左右无缝滚动(一般方法+面向对象方法)
Aug 17 Javascript
深入探讨javascript中的数据类型
Mar 04 Javascript
JavaScript编程的单例设计模讲解
Nov 10 Javascript
微信小程序实战之自定义模态弹窗(8)
Apr 18 Javascript
JS触摸与手势事件详解
May 09 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
Jul 23 Javascript
JavaScript利用fetch实现异步请求的方法实例
Jul 26 Javascript
如何抽象一个Vue公共组件
Oct 17 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
Sep 13 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
Aug 03 Javascript
jquery实现简易验证插件封装
Sep 13 jQuery
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递归列出所有文件和目录的代码
2008/09/10 PHP
MySQL连接数超过限制的解决方法
2011/07/17 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
PHP实现懒加载的方法
2015/03/07 PHP
jQuery 获取对象 定位子对象
2010/05/31 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
JQuery入门——事件切换之hover()方法应用介绍
2013/02/05 Javascript
js setTimeout 参数传递使用介绍
2013/08/13 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
Angular2搜索和重置按钮过场动画
2017/05/24 Javascript
js编写简单的计时器功能
2017/07/15 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
详解angular笔记路由之angular-router
2017/09/12 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
2017/12/27 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
vuex的使用步骤
2021/01/06 Vue.js
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
Python写入数据到MP3文件中的方法
2015/07/10 Python
用Python写脚本,实现完全备份和增量备份的示例
2018/04/29 Python
python用BeautifulSoup库简单爬虫实例分析
2018/07/30 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
Python实现堡垒机模式下远程命令执行操作示例
2019/05/09 Python
Django REST framework 分页的实现代码
2019/06/19 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
计算机专业推荐信范文
2013/11/20 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
运动会通讯稿600字
2015/07/20 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
方法汇总:Python 安装第三方库常用
2022/04/26 Python