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

Count in an array the number for each same value

我的职能是

       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}

您可以使用以下代码转换您的变量:

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]++
});

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

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

你可以尝试这样的事情: 将您的 Array 写入 Map 并在每次您的 map 已经知道密钥时增加您的值。

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

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

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/