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的逻辑运算符 ||
May 31 Javascript
js中的屏蔽的使用示例
Jul 30 Javascript
浅谈JavaScript Math和Number对象
Jan 26 Javascript
基于jQuery插件实现点击小图显示大图效果
May 11 Javascript
JavaScript事件学习小结(三)js事件对象
Jun 09 Javascript
vue.js指令和组件详细介绍及实例
Apr 06 Javascript
JavaScript队列的应用实例详解【经典数据结构】
Apr 12 Javascript
Vuejs实现带样式的单文件组件新方法
May 02 Javascript
vue组件生命周期详解
Nov 07 Javascript
浅谈React组件之性能优化
Mar 02 Javascript
vue.js项目 el-input 组件 监听回车键实现搜索功能示例
Aug 25 Javascript
Vue作用域插槽slot-scope实例代码
Sep 05 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
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
ThinkPHP的I方法使用详解
2014/06/18 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
prototype Element学习笔记(篇二)
2008/10/26 Javascript
突发奇想的一个jquery插件
2010/11/19 Javascript
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
javascript遍历控件实例详细解析
2014/01/10 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
强大Vue.js组件浅析
2016/09/12 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
2017/06/23 Javascript
js插件实现图片滑动验证码
2020/09/29 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
[01:26]DOTA2荣耀之路2:iG,China
2018/05/24 DOTA
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
python开发之字符串string操作方法实例详解
2015/11/12 Python
python爬取网页转换为PDF文件
2018/06/07 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
Python删除n行后的其他行方法
2019/01/28 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
Python实现元素等待代码实例
2019/11/11 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
2021/02/07 Python
CSS3 flex布局之快速实现BorderLayout布局
2015/12/03 HTML / CSS
领导干部培训感言
2014/01/23 职场文书
高中运动会入场词
2014/02/14 职场文书
元旦获奖感言
2014/03/08 职场文书
贷款承诺书范文
2014/05/19 职场文书
小学兴趣小组活动总结
2014/07/07 职场文书
社区创先争优承诺书
2014/08/30 职场文书
优秀班主任申报材料
2014/12/16 职场文书
三八妇女节致辞
2015/07/31 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python