JavaScript查找字符串中出现次数最多的字符及个数实例解析

作者:纸飞机时间:2026-10-30 13:22:50浏览:382

本文详细解析在JavaScript中查找字符串出现次数最多字符的三种实现方式。通过对象键值对统计字符频率、利用数组排序结合正则表达式匹配,以及传统循环遍历对比,展示不同场景下的代码逻辑与性能差异,帮助开发者掌握字符串高频元素提取的核心技巧。

以字符串“sssfgtdfssddfsssfssss”为例,其中出现频率最高的字符为“s”,总计出现12次。

传统对象统计法

传统写法

分析:

1. 初始化一个空对象,遍历字符串中的每个字符。若该字符未作为键存在于对象中,则创建新键并赋予一个数组,将当前字符推入该数组;若键已存在,则继续将字符推入对应数组。遍历结束后,对象中将包含n个数组。

2. 遍历对象,找出长度最长的数组,其长度即为字符出现次数,对应的键即为最高频字符。此过程需使用for...in循环及参数attr进行判断。


var str="sssfgtdfssddfsssfssss";
function max(){
var json={};
var num=0;
var value=null;
for(var i=0;i<str.length;i++){
var k=str[i];
if(!json[k]){
json[k]=[];
}
json[k].push(k); //这里不需要else,否则只有存在这个字符时才添加。次数会少一次
}
for(var attr in json){
if(num<json[attr].length){
num=json[attr].length;
value=json[attr][0];
}
}
alert("出现最多的字符是:"+value+',出现次数是:'+num);
};
max(str);

如果不想往json里放东西怎么做呢?

分析:

1. 初始化一个空对象,遍历字符串中的每个字符。若该字符未作为键存在于对象中,则将其值设为1;若已存在,则将该键对应的值加1。

2. 遍历对象中的键,将每个键对应的值与一个变量进行比较。若当前值大于该变量,则更新变量值为当前值。最终,该变量的值即为最高频字符的出现次数。

而最多的字符就是json里这个字符


var str="sssfgtdfssddfsssfssss";
function max(){
var json={};
for(var i=0;i<str.length;i++){
var k=str[i]; //k是所有字符,字符串也跟数组一样可以通过中括号下标方法取到每个子元素
if(json[k]){
json[k]++; //json里有这个字符时,把这个字符的数量+1,
}
else{
json[k]=1; //否则把这个字符的数量设为1
}
}
var num=0;
var value=null;
for(var k in json){ //s、f、g、t、d
if(json[k]>num){
num=json[k];
value=k;
}
}
alert("出现最多的字符是:"+value+',出现次数是:'+num);
};
max(str); 

正则表达式匹配法

正则的方法

分析:

1. 将字符串转换为数组并进行排序,以便正则表达式能选出相同的挨在一起的字符。

2. 通过正则replace()方法的两个参数,来匹配出现最多的字符和数量


var str="sssfgtdfssddfsssfssss";
var num=0;
var value=null;
function max(){
var new_str=str.split("").sort().join("");
var re=/(\w)\1+/g; //没有\1,re就是一整个排好序的字符串,有了\1就是出现过的有重复的取出来,\1表示跟前面第一个子项是相同的
new_str.replace(re,function($0,$1){ //$0代表取出来重复的一个个整体,如[s,s...],[f,f..],[d,d....] $1代表这个整体里的字符
if(num<$0.length){
num=$0.length;
value=$1
}
});
alert(value+":"+num)
};
max(str);

作者最新文章