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利用与或运算符优先级实现if else条件判断表达式
Apr 15 Javascript
jQuery 类twitter的文本字数限制带提示效果插件
Apr 16 Javascript
javascript中call和apply方法浅谈
Sep 27 Javascript
JS实现弹性漂浮效果的广告代码
Sep 02 Javascript
微信小程序 wxapp内容组件 progress详细介绍
Oct 31 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
Jul 12 jQuery
Axios学习笔记之使用方法教程
Jul 21 Javascript
Javascript之图片的延迟加载的实例详解
Jul 24 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
Sep 26 Javascript
JavaScript设计模式之工厂模式简单实例教程
Jul 03 Javascript
浅谈Webpack核心模块tapable解析
Sep 11 Javascript
js实现图片局部放大效果详解
Mar 18 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 $_ENV为空的原因分析
2009/06/01 PHP
PHP禁止个别IP访问网站
2013/10/30 PHP
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
PHP中Array相关函数简介
2016/07/03 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
2010/11/25 Javascript
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
javascript之Partial Application学习
2013/01/10 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
自己封装的javascript事件队列函数版
2014/06/12 Javascript
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
2016/07/26 NodeJs
Angular页面间切换及传值的4种方法
2016/11/04 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
Python双精度浮点数运算并分行显示操作示例
2017/07/21 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
如何在发生故障的节点上重新安装 SQL Server
2013/03/14 面试题
班主任工作经验材料
2014/02/02 职场文书
化妆品活动策划方案
2014/05/23 职场文书
委托公证书格式
2015/01/26 职场文书
服务员岗位职责范本
2015/04/09 职场文书
大学生读书笔记大全
2015/07/01 职场文书
24句精辟的现实社会语录,句句扎心,道尽人性
2019/08/29 职场文书
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
2022/04/30 Vue.js
java版 简单三子棋游戏
2022/05/04 Java/Android
nginx 配置指令之location使用详解
2022/05/25 Servers