我的功能是
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}
答案 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]++;
});
答案 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);
}
答案 3 :(得分:0)
不是将值放在数组中,然后从数组中获取值来处理它们并创建对象,而是将它们放在对象中以开始:
var map = {};
$('input:checked').each(function() {
var key = $(this).val();
if (key in map) {
map[key]++;
} else {
map[key] = 1;
}
});