在数组中计算每个相同值的数字

时间:2015-04-30 10:04:00

标签: javascript arrays object count

我的功能是

       var MyArray= [];
        $('input:checked').each(function(index) {
            MyArray= ($(this).attr('id') + ":" + $(this).val()).length;
        });

我的数组是

Array [ "1:R1", "2:R2", "3:R3", "4:R1" ]

我想计算不同的值并获取此对象

Object {R1:2, R2:1, R3:1}

4 个答案:

答案 0 :(得分:0)

您可以使用以下代码转换var:

var arr = [ "1:R1", "2:R2", "3:R3", "4:R1" ];

var obj = {};

for(var i=0, l=arr.length; i<l; i++) {
  var parts = arr[i].split(':');
  if(parts.length > 1) {
    if(!obj[parts[1]]) {
      obj[parts[1]] = 0;
    }
    obj[parts[1]]++
  }
}

console.log(obj)

或直接创建正确的对象:

var obj = {};

$('input:checked').each(function (index) {
  var key = $(this).val();
  if (!obj[key]) {
    obj[key] = 0;
  }
  obj[key]++
});

答案 1 :(得分:0)

使用正则表达式捕获字符串的正确部分,并将它们作为键添加到对象中,如果值已经存在,则递增值:

var regex = /\d+:(R\d+)/
var obj = {};
arr.forEach(function (el) {
    var key = el.match(regex)[1];
    if (!obj[key]) obj[key] = 0;
    obj[key]++;
});

DEMO

答案 2 :(得分:0)

你可以尝试这样的事情: 将您的数组写入地图,并在每次地图已经知道密钥时提升您的价值。

for(var i = 0; i < myArray.length; i++){
  var entry = myArray[i];
  var key = entry.split(":")[1];

  if(myMap.has(key))
      myMap.set(key, myMap.get(key) + 1);
  else
      myMap.set(key, 1);
}

DEMO

答案 3 :(得分:0)

不是将值放在数组中,然后从数组中获取值来处理它们并创建对象,而是将它们放在对象中以开始:

var map = {};
$('input:checked').each(function() {
  var key = $(this).val();
  if (key in map) {
    map[key]++;
  } else {
    map[key] = 1;
  }
});

演示:http://jsfiddle.net/Guffa/0a35c6yp/