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

如何获取数组中最常见的值:javascript,javascript,arrays,Javascript,Arrays,我必须在JavaScript中找到数组中最常见的值 我的密码 eg阵列 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], maxCo

我必须在JavaScript中找到数组中最常见的值

我的密码

eg阵列

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;
}
代码在A的情况下工作正常,“A”最多重复2次,所以我得到“A”就可以了


但在B的情况下,“a”和“c”都重复2次,但我只得到a,但我的要求是在for循环后同时得到“a”和“c”。

添加以下代码

result = [];
for ( var key in frequency )
{
   if (frequency[key] == max)
   {
     result.push(key);
   }
}
console.log(result);
它再次迭代频率数组以返回频率与最大频率相同的项目。

收集频率相同的项目

函数getMostCommon(数组){ 变量计数={}; array.forEach(函数(a){ 计数[a]=(计数[a]| 0)+1; }); 返回Object.keys(count).reduce(函数(r,k,i){ 如果(!i | | count[k]>count[r[0]]){ 返回[k]; } 如果(计数[k]==计数[r[0]]){ r、 推(k); } 返回r; }, []); } 变量a=[“a”、“c”、“a”、“b”、“d”、“e”、“f”], b=[“a”、“c”、“a”、“c”、“d”、“e”、“f”]; document.write(“”+JSON.stringify(getMostCommon(a),0,4)+“”);
write(“”+JSON.stringify(getMostCommon(b),0,4)+“”)和的可能重复,因为您正在执行严格大于的比较。您也只返回maxEl,它对应于1个索引。要返回多个结果,您应该返回一个数组,这样您就不能只存储
maxEl
元素。。我建议您跟踪maxCount,然后在最后返回该计数的所有元素,用英语写下您需要执行的步骤。然后,将英语转换成JavaScript。@BennyBottema-这不仅是一个重复的问题。。。OP的代码与所选答案相同。所以很明显,“尝试编码”的意思是“复制和粘贴”。
result = [];
for ( var key in frequency )
{
   if (frequency[key] == max)
   {
     result.push(key);
   }
}
console.log(result);