如何在数组中获取最常见的值:javascript

时间:2016-03-09 11:43:30

标签: javascript arrays

我必须在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”。

2 个答案:

答案 0 :(得分:0)

在for循环后添加以下代码

result = [];
for ( var key in frequency )
{
   if (frequency[key] == max)
   {
     result.push(key);
   }
}
console.log(result);

它再次迭代频率数组以返回频率与最大频率相同的项目。

答案 1 :(得分:0)

使用Array#reduce()收集项目。

&#13;
&#13;
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;
&#13;
&#13;