扫码关注官方订阅号
找到数组["a","x","b","d","m","a","k","m","p","j","a"];出现最多的字母并给出个数和每一个所在的顺序。
新手不太会,希望得思路提示或者代码
小伙看你根骨奇佳,潜力无限,来学PHP伐。
1、统计次数,记录位置2、找最大,输出
var arr = ["a","x","b","d","m","a","k","m","p","j","a"]; var count = {}; var pos = {}; //遍历arr,统计每个字母出现次数且记录位置 arr.forEach(function(value, index){ if(count[value]){ count[value] ++; pos[value] += ","+index; } else { count[value] = 1; pos[value] = ""+index; } }); console.log(count); console.log(pos); //获取出现最多的字母 var max = 0; var letter; for(i in count){ if(count[i] > max ){ max = count[i]; letter = i; } } console.log("最多的是:" + letter); console.log("位置分布:" + pos[letter]);
var arr = ["a","x","b","d","m","a","k","m","p","j","a"]; var res = {}; arr.forEach(function(v,i){ if(v in res){ res[v] += 1; }else{ res[v] = 1; } }); console.log(res); var num = 0; for (i in res){ if(res[i] > num) { num = res[i]; } }
搜集数组中的每个字符以及对应的位置信息,存储的格式如下对象的属性是数组的元素,而对象的值是一个数组,记录着位置的索引
{ 'a':[0,5,10], 'x':[1] }
获取出现次数最多的字符,以及对应的位置
function getMaxAndIndex( arr ){ var obj = {}; arr.forEach(function(item,index){ if(!obj[item]){ obj[item]= {indexs: [index]} }else{ obj[item]['indexs'].push(index); } }); var num=0;//记录出现次数最大值 var str='';//记录出现次数最多的字符 var reArr;//返回最大值的位置数组 for(var attr in obj){ var temp=obj[attr]['indexs']; if(temp.length>num){ num=temp.length; str=attr; reArr=temp; } } return { maxStr:str, indexs:reArr } }
测试结果截图
let arr = ["a","x","b","d","m","a","k","m","p","j","a"], t, o; t = arr.reduce( (r, i) => { r[i] = (r[i] || 0) + 1; return r; }, {} ); o = Object.keys( t ).sort( (p, n) => t[n] - t[p] )[0]; console.log(o);
前面解决方案都存在BUG,如果有出现最多的字母有多个,就有会有问题,详细代码参考:
var arr = ['a', 'x', 'b', 'd', 'm', 'm', 'a', 'k', 'm', 'p', 'p', 'p', 'p', 'j', 'a', 'a']; //计数 var count = {}; //索引 var pos = {}; //遍历原数组并且生成新数组 for (var i = 0; i < arr.length; i++) { var char = arr[i]; if (count[char]) { count[char] += 1; pos[char] += ',' + i; } else { count[char] = 1; pos[char] = i; } } // console.log(count); // console.log(pos); //返回出现次数最多的字母的次数(降序排列后取第一个数字) var max = count[Object.keys(count).sort(function(a, b) { return count[a] <= count[b]; })[0]]; // console.log(max); //出现次数最多的字母如果有多个,全部写入arr_pu数组中,并输出 var arr_pu = []; for (i in count) { if (count[i] >= max) { //将最大值给max max = count[i]; //将出现最多的字母放到arr_pu数组中 arr_pu.push(i); console.log(arr_pu) } } document.write('出现次数最多的字母是:' + arr_pu + '<br>'); //将出现最多的字母的次数输出 for (var i = 0; i < arr_pu.length; i++) { key = arr_pu[i]; document.write(key + '出现的次数为:' + count[key] + '<br>'); document.write(key + '的位置分别为:' + pos[key] + '<br>'); }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
1、统计次数,记录位置
2、找最大,输出
搜集数组中的每个字符以及对应的位置信息,存储的格式如下
对象的属性是数组的元素,而对象的值是一个数组,记录着位置的索引
获取出现次数最多的字符,以及对应的位置
测试结果截图

前面解决方案都存在BUG,如果有出现最多的字母有多个,就有会有问题,详细代码参考: