2012-07-25 193 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 
相關問題