JS中在字符串中查找具有最大数量字母方法,目前我所知道的有两种方法:
第一种方法:大概的思路为,先创建一个属性为空的对象var json={};将字符数组中的各个字母变成变量名,该变量类型为数组的形式,采用条件判断语句if(!json[str[i]]){json[str[i]]=str[i];}str指向字符串,i为循环指数,指的是第几个字母。然后再将该字母存入指定的数组中所用到的语句为:json[str[i]].push(str[i]);这时字符串经过一次遍历后,就可以把各个字母存入json的指定数组中,接下来就要判断json中各个数组的长度,长度大于max时(max为存放最大字符个数),if(json[i].length>max)max=json[i].length;value=i;},value为保存的当前具有最大个数的变量名。以下为该JS程序的代码片段:
function count(str){
var json={};//空的json对象
var max=0;存放字符的最大个数
var value="";//存放具有最大个数的字符
for(var i=0;i<str.length;i++){循环遍历字符数组为json添加相应变量
if(!json[str[i]]){//如果没有该变量名,则添加新的变量名,
json[str[i]]=[];//新添加的变量名指向一个空数组
}
json[str[i]].push(str[i]);//往相应的空数组中添加元素
}
for(var i in json){//循环遍历json中的数组变量
if(json[i].length>max){//如果某个数组变量长度大于max,则暂时将该数组长度作为最大值
max=json[i].length;
value=i;
}
}
return "具有最大数的字母为: "+value+" 个数为:"+max;
}
第二种方法:该方法中没有借助json,而是用循环语句及相应的条件判断语句来完成所需的功能。大概思路:先找出字符数组中每个元素所对应的个数,然后再根据个数来判断哪个字符串中的哪个字母有最大个数。当然在这个过程中是要从头到尾逐一遍历字符数组中的元素的。例如将第一个元素与其后的所有元素进行比较,如果有相同的情况,则将计数变量n加一,即n++;依此类推,取第二个元素与其后的元素进行比较。不过应该请注意的是,如果从第二个元素以后(包括第二个元素),与它之前的元素有相同的情况,则应该停止上述的操作过程,例如有这样一个字符串:“affewafwa”,当第一次统计a的个数时a的个数为3,但当取到第二个a时,它就不能和它之后的元素进行比较了,原因是它已经和前面的元素比较过一次了。所以应该停止其与后面元素的比较过程,直接跳到下一个元素,进行相同的操作过程。直到遍历完整个字符数组。这时就可以找出满足条件的字符了。代码如下所示:
function maxCount(str) {
var max = 0,n = 0;//max存放字母的最大个数
var value="";//用来存放存放具有最大个数的字母
for(var i = 0; i < str.length; i++) {//循环遍历数组中的每个元素
var temp = str[i];//temp临时存放第i个元素
for(var k = 0; k < i; k++) {//用于找出第i个元素是否与前i-1个元素中的某个相同的条件
if(str[k] == str[i])//如果存在相同情况,则提前结束该循环,此时k<i
break;
}
if(k >= i) {//如果第i个元素与前i-1个元素都不同,则第i个元素为第一次出现,应继续与其后的元素进行比较
for(var j = i; j < str.length; j++) {//循环找出与第i个元素相同且下标大于等于i的元素个数
if(temp == str[j]) {//如果找到相同的则n自增1
n++;
}
}
if(n>max){//如果本次循环找出的元素个数(n)大于之前存放的最大元素个数,将执行max=n;操作,同时
max=n;//将本次所找出的元素赋给value
value=temp;
}
}
n=0;
}
return "个数最多的字母为:"+value+" 个数为:"+max;
}
两种方法代码的的运行结果完全一致。