如何计算数组中每个项目的出现次数?

时间:2012-07-25 12:03:44

标签: javascript jquery arrays

我有一个如下数组,

var arr = ['ab','pq','mn','ab','mn','ab']

预期结果

arr['ab'] = 3
arr['pq'] = 1
arr['mn'] = 2

尝试如下,

$.each(arr, function (index, value) {
    if (value) 
        arr[value] = (resultSummary[value]) ? arr[value] + 1 : 1;
});

console.log(arr.join(','));

8 个答案:

答案 0 :(得分:44)

无需使用jQuery执行此任务 - 此示例将构建一个对象,其中包含O(n)

中数组中每个不同元素的出现量
var occurrences = { };
for (var i = 0, j = arr.length; i < j; i++) {
   occurrences[arr[i]] = (occurrences[arr[i]] || 0) + 1;
}

console.log(occurrences);        // {ab: 3, pq: 1, mn: 2}
console.log(occurrences['mn']);  // 2
  

Example fiddle


您还可以使用Array.reduce获得相同的结果并避免使用for-loop

var occurrences = arr.reduce(function(obj, item) {
  obj[item] = (obj[item] || 0) + 1;
  return obj;
}, {});

console.log(occurrences);        // {ab: 3, pq: 1, mn: 2}
console.log(occurrences['mn']);  // 2
  

Example fiddle

答案 1 :(得分:6)

我认为这是如何计算数组中具有相同值的事件的最简单方法。

var a = [true, false, false, false];
a.filter(function(value){
    return value === false;
}).length                                      

答案 2 :(得分:3)

如果您不需要需要库的解决方案,并且不必支持旧版javascript:

var report = {};

arr.forEach(function(el){
  report[el] = report[el] + 1 || 1;
});

或者如果你想使用jQuery:

var report = {};

$.each(arr,function(i,el){
  report[el] = report[el] + 1 || 1;
});

这使用short-circuit logic来测试条件和设置值。我认为这是一种非常简洁易读的javascript方式。

console.log( report );

答案 3 :(得分:2)

如果您使用的是Sugar库,那就是:

arr.count('ab');

<强> DEMO

请参阅:Array count API

答案 4 :(得分:1)

var result = {};
function count(input){
  var tmp = 0;
  if(result.hasOwnProperty(input)){
     tmp = result[input];
     result[input]=tmp+1;
  }else{
    result[input]=1;
  }
}

上面的函数将帮助您计算数组中相同字符串的数量。

答案 5 :(得分:1)

尝试$.grep

示例:

var arr = ['ab','pq','mn','ab','mn','ab']

jQuery.grep(arr, function(a){
   return a == 'ab'
}).length // 3

如果不需要支持ie8。

['ab','pq','mn','ab','mn','ab'].filter(function(value){
    return value == 'ab'
}).length // 3

答案 6 :(得分:0)

这可能是你想要做的吗?

$.each(arr, function(index, value) {
    if (!resultSummary[value]){
        resultSummary[value] = 0;
    }
    resultSummary[value] += 1;
});

此代码将计算数组中每个字符串的出现次数,并将结果存储在resultsArray

答案 7 :(得分:0)

var arr = ['ab','pq','mn','ab','mn','ab']



function getCount(arr,val)
{
    var ob={};
    var len=arr.length;
    for(var k=0;k<len;k++)
    {
        if(ob.hasOwnProperty(arr[k]))
        {
            ob[arr[k]]++;
            continue;
        }
        ob[arr[k]]=1;
    }
    return ob[val];
}



//run test
alert(getCount(arr,'ab'));//3

var arr = ['ab','pq','mn','ab','mn','ab'] function getCount(arr,val) { var ob={}; var len=arr.length; for(var k=0;k<len;k++) { if(ob.hasOwnProperty(arr[k])) { ob[arr[k]]++; continue; } ob[arr[k]]=1; } return ob[val]; } //run test alert(getCount(arr,'ab'));//3

演示:http://jsfiddle.net/dmx4y/2/