在数组中计算每个相同值的数量
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]++;
});
你可以尝试这样的事情:
将您的 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);
}
不是将值放在数组中,然后从数组中取出值来处理它们并创建对象,而是将它们放在对象中以开始:
var map = {};
$('input:checked').each(function() {
var key = $(this).val();
if (key in map) {
map[key]++;
} else {
map[key] = 1;
}
});
我的职能是
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]++;
});
你可以尝试这样的事情: 将您的 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);
}
不是将值放在数组中,然后从数组中取出值来处理它们并创建对象,而是将它们放在对象中以开始:
var map = {};
$('input:checked').each(function() {
var key = $(this).val();
if (key in map) {
map[key]++;
} else {
map[key] = 1;
}
});