找到数组["a","x","b","d","m","a","k","m","p","j","a"];出现最多的字母并给出个数和每一个所在的顺序。
新手不太会,希望得思路提示或者代码
找到数组["a","x","b","d","m","a","k","m","p","j","a"];出现最多的字母并给出个数和每一个所在的顺序。
新手不太会,希望得思路提示或者代码
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>');
}
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
6 回答1.1k 阅读
1、统计次数,记录位置
2、找最大,输出