0

如何获取数组成员和它们重复的次数(重复)?

我目前有这个脚本

//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));

数组“count”的值是(我使用 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]

我希望我的脚本显示什么...(我希望它返回一个数组)

[1: 10, 2: 3]

(x: y) x 是数字,y 是它重复的次数。

我得到什么...

[null,1,1]
4

5 回答 5

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
于 2012-07-09T07:26:50.213 回答
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;
    }
 }
}
于 2012-07-09T07:33:22.320 回答
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);
于 2012-07-09T07:38:36.120 回答
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);
于 2012-07-09T07:47:18.910 回答
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;
            }
于 2012-07-09T08:18:47.533 回答