【问题标题】:How to count the number of times variables repeats in a javascript array?如何计算变量在javascript数组中重复的次数?
【发布时间】:2012-07-09 07:22:17
【问题描述】:

如何获取数组成员及其重复次数(重复)?

我目前有这个脚本

//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]

【问题讨论】:

  • 您的预期结果看起来像一个对象字面量,但用方括号括起来使它看起来像一个数组。
  • 很抱歉,如果它令人困惑。我试图从中取出一个数组。

标签: javascript arrays sorting loops


【解决方案1】:
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

【讨论】:

    【解决方案2】:

    这将为您提供摘要,忽略空值

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

    【讨论】:

    • 感谢您的回答和删除空值!
    【解决方案3】:

    使用您的代码,

    像这样修改你的循环,

    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;
        }
     }
    }
    

    【讨论】:

      【解决方案4】:

      不确定它是否是最好的解决方案,但它可以工作并将输出保存在数组中。

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

      【讨论】:

        【解决方案5】:

        试试这个:

        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;
                    }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-24
          • 2019-08-01
          • 2012-11-18
          • 2019-06-09
          • 1970-01-01
          • 2017-01-08
          相关资源
          最近更新 更多