我必须在JavaScript中找到数组中最常见的值。
我试过的编码
例如数组
var A = ["a", "c", "a", "b", "d", "e", "f"];
var B = ["a", "c", "a", "c", "d", "e", "f"];
function mode(array)
{
if(array.length == 0)
return null;
var modeMap = {};
var maxEl = array[0], maxCount = 1;
for(var i = 0; i < array.length; i++)
{
var el = array[i];
if(modeMap[el] == null)
modeMap[el] = 1;
else
modeMap[el]++;
if(modeMap[el] > maxCount)
{
maxEl = el;
maxCount = modeMap[el];
}
}
return maxEl;
}
和其他一个
var store = ['1','2','2','3','4'];
var frequency = {}; // array of frequency.
var max = 0; // holds the max frequency.
var result; // holds the max frequency element.
for(var v in store) {
frequency[store[v]]=(frequency[store[v]] || 0)+1; // increment frequency.
if(frequency[store[v]] > max) { // is this frequency > max so far ?
max = frequency[store[v]]; // update max.
result = store[v]; // update result.
}
}
代码在A情况下工作正常,“a”最多重复2次,所以我得到“a”即可。
但是在B的情况下,“a”&amp; “c”都重复了2次,但我只得到了A,但我的要求是同时获得“a”和&amp; “C”。
答案 0 :(得分:0)
在for循环后添加以下代码
result = [];
for ( var key in frequency )
{
if (frequency[key] == max)
{
result.push(key);
}
}
console.log(result);
它再次迭代频率数组以返回频率与最大频率相同的项目。
答案 1 :(得分:0)
使用Array#reduce()
收集项目。
function getMostCommon(array) {
var count = {};
array.forEach(function (a) {
count[a] = (count[a] || 0) + 1;
});
return Object.keys(count).reduce(function (r, k, i) {
if (!i || count[k] > count[r[0]]) {
return [k];
}
if (count[k] === count[r[0]]) {
r.push(k);
}
return r;
}, []);
}
var a = ["a", "c", "a", "b", "d", "e", "f"],
b = ["a", "c", "a", "c", "d", "e", "f"];
document.write('<pre>' + JSON.stringify(getMostCommon(a), 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(getMostCommon(b), 0, 4) + '</pre>');
&#13;