2012-07-09 105 views
0

如何獲取數組成員及其重複次數(重複次數)?如何統計變量在javascript數組中重複的次數?

目前,我有這個劇本

//COUNT VAL 
var curr = ''; 
var previous = ''; 
var arr = new Array(); 
var sorted = count.sort(); 
for(var c=0; c < sorted.length; c++){ 
if(sorted[c] != ''){ 
if(sorted[c] != curr){ 
var repeat = 1; 
arr[sorted[c]] = repeat; 
curr = sorted[c]; 
} 
else if(sorted[c] == curr){ 
repeat++; 
} 
} 
} 
alert(JSON.stringify(arr)); 

數組的值「計數」是(我使用JSON.stringify):

[" 2"," 2"," 2","1","1","1","1","1","1","1","1","1","1",null,null,null,null,null,null,null,null,null,null,null,null,null] 

我希望我的腳本來顯示什麼? (IM期待它返回一個數組)

[1: 10, 2: 3] 

(X:Y)x是數量,y是次重複它的數量。

我能得到什麼?

[null,1,1] 
+0

您預期的結果看起來像一個對象文本,但方括號括起來,這使它看起來像一個數組。 – Jamiec 2012-07-09 07:26:24

+0

對不起,如果它令人困惑。我試圖讓一個數組。 – JohnSmith 2012-07-09 07:33:39

回答

1

這會給你的總結,忽略空值

var collection = [" 2"," 2"," 2","1","1","1","1","1","1","1","1","1","1",null,null,null,null,null,null,null,null,null,null,null,null,null]; 

var summary = collection.reduce(function(a, b) { 
    var tmp = parseInt(b) 
    if (!isNaN(tmp)) { 
     if (!a[tmp]) { 
      a[tmp] = 0; 
     } 
     a[tmp]++; 
    } 
    return a; 
}, {}); 

console.log(summary); 
+0

謝謝你的答案,並刪除空值! – JohnSmith 2012-07-09 07:47:43

2
var a = [" 2"," 2"," 2","1","1","1","1","1","1","1","1","1","1",null,null,null,null,null,null,null,null,null,null,null,null,null]; 

var counts = a.reduce(function(obj, cur){ 
    if(!obj[cur]) { 
     obj[cur] = 0; 
    } 
    obj[cur]++; 
    return obj; 
}, {}); 

結果

2: 3 
1: 10 
null: 13 
1

使用你的代碼,

修改你的循環這樣,

for(var c=0; c < sorted.length; c++){ 
if(sorted[c] != ''){ 
    if(arr[sorted[c]]){ 
     var count = arr[sorted[c]]; 
     count++; 
     arr[sorted[c]] = count; 
    } 
    else{ 
     arr[sorted[c]] = 1; 
    } 
} 
} 
0

不知道它的最佳的解決方案,但它的工作原理,並保存輸出數組。

var arr = [" 2"," 2"," 2","1","1","1","1","1","1","1","1","1","1",null,null,null,null,null,null,null,null,null,null,null,null,null]; 

var obj = {}; 
var final = []; 
var count = 0; 
for(var i=0,len=arr.length;i<len;i++){ 
    if(arr[i] in obj){ 
    final[obj[arr[i]]] ++; 
    } 
    else{ 
    obj[arr[i]] = count; 
    final[count] = 1; 
    count++; 
    } 
} 

console.log(final); 
0

試試這個:

var repeated = function repeated(arr){ 
       var res = {}; 
       for(index in arr){ 
        var x = arr[index]; 
        if(!res.hasOwnProperty(x)) 
         res[x] = 0;  
        res[x]++; 
       } 
       return res; 
      }