获取阵列中最重复的项目

时间:2016-02-22 15:36:23

标签: javascript arrays

我有以下数组:

var arr = ['a', 'b', 'a', 'c', 'a', 'b'];

如何从阵列中获得最受欢迎的作品?

arr.getPopular() // 'a'

有人能解释我如何实现这个目标吗? 我试图转换为对象http://jsbin.com/repokasati/edit?html,js,console,output,并且有类似

的内容
var obj = {
  a: 3,
  b: 1,
  c: 0,
  d: 0
}

如何从obj获得具有最大价值的密钥?

2 个答案:

答案 0 :(得分:2)

这是Array#reduce()的解决方案。它也返回相同的引用:

var arr = ['a', 'b', 'a', 'c', 'a', 'b', 'b'],
    count = function (array) {
        var o = {};
        array.forEach(function (a) {
            o[a] = (o[a] || 0) + 1;
        });
        return o;
    }(arr),
    max = function (o) {
        var keys = Object.keys(o);
        return keys.reduce(function (r, k) {
            if (o[k] > o[r[0]]) {
                return [k];
            }
            if (o[k] === o[r[0]]) {
                r.push(k);
            }
            return r;
        }, [keys.shift()]);
    }(count);

document.write('<pre>' + JSON.stringify(count, 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(max, 0, 4) + '</pre>');

答案 1 :(得分:0)

你可以使用Jquery $ .each函数迭代键和值对并获得具有最高值的键.Below是相同的代码

 var obj = {
  a: 3,
   b: 1,
   c: 0,
   d: 0
  }
 var base=0;
 $.each(obj,function(key,value)
{ 
{
 if(value>base)
 high=key;
 base=value;
 }});
  console.log(high);

high将给出具有最高值的键的值