2012-07-25 142 views
13

我有一个数组如下,如何统计数组中每个项目的出现次数?

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(',')); 
+2

没有像“jQuery数组”那样的东西。 – 2012-07-25 12:04:27

+1

http://stackoverflow.com/questions/5615916/jquery-count-array-elements-by-value – timmalos 2012-07-25 12:07:33

+3

非常模糊的问题 – user907860 2012-07-25 12:07:39

回答

36

无需使用jQuery这个任务—这个例子将建立一个对象与阵列中每个不同元素的出现量相关联

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

+0

+1添加小提琴来演示您的答案。为什么downvotes? – starbeamrainbowlabs 2012-07-25 12:18:04

+2

你也可以使用一个很好的速记,比如'obj [arr [i]] =(obj [arr [i]] || 0)+ 1'。只要你不关心数据类型,你的解决方案就可以工作,但是如果你想区分“2”和“2”,你必须对这些信息进行编码(只是说)。 – 2012-07-25 12:18:05

+0

速记的好处:) – fcalderan 2012-07-25 12:21:04

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

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

0

难道这就是你想要做的?

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

这个代码将计算阵列中的每个字符串的发生和结果存储在resultsArray

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 

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

1

,如果你不想要,需要一个图书馆,并没有支持传统的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; 
}); 

This使用short-circuit logic来测试条件和设定值。我认为这是一个非常简洁和可读的方式来做JavaScript。

console.log(report); 
5

我认为这是最简单的方法,如何计算数组中相同值的出现次数。

var a = [true, false, false, false]; 
a.filter(function(value){ 
    return value === false; 
}).length          
0
var arr = ['ab','pq','mn','ab','mn','ab']; 
var result = { }; 
    for(i=0;i<arr.length;++i) 
    { 
     if(!result[arr[i]]) 
      result[arr[i]]=0; 
     ++result[arr[i]]; 
    } 

for (var i in result){ 
console.log(i+":"+result[i]); 
} 
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 
相关问题