好吧,我研究了这个问题,但在这里找不到答案,所以希望这不是重复的。我也尽量不具体,以便自己解决这个问题。
var arr = ['cat','car','cat','dog','car','dog']
function orgNums(input) {
var count = 0;
var obj = {};
for (var i = 0; i < input.length; i++) {
if (input[i] === 'cat')
obj['cat'] = count++;
}
return obj;
}
我希望它返回{cat:2}
但我得到 {cat:1}
最终我希望它返回 {cat:2, car:1, dog:2, gerbil:1}
所以我尝试使用 obj[cat] = ++count
我得到了我想要的答案,但是当我尝试第二个 if 语句时: if input[i] === 'dog', obj[dog] = ++count
我得到{cat:2, dog:4}
。我注意到它正在采取什么 count
已经是 0,然后将其移至 2 以数猫,然后将其移至 4,将狗计数为 2 并加 2。我如何防止这种情况发生,以便 count
每次都从 0 重新开始?
编辑: 所以这效果很好 var arr = ['猫', '汽车', '猫', '狗', '汽车', '狗']
function orgNums(input) {
var obj = {};
for (var i = 0; i < input.length; i++) {
obj[input[i]] = obj[input[i]] || 0;
obj[input[i]]++;
}
return obj;
}
console.log(orgNums(arr));
但我真正想要的最终输出是:
[
{cat:1
dog:2
}
{car:2
}
]
所以我尝试加入这样的 if 语句:
if (input[i] === 'cat'||'dog')
但它仍然抛出 car
进入物体。我将尝试找出数组中的多个对象。再次感谢!
最佳答案
您可以减少数组,然后边计算键的数量
var arr = ['cat', 'car', 'cat', 'dog', 'car', 'dog', 'horse'];
function orgNums(input) {
return input.reduce((a, b) => {
return b in a ? a[b]++ : a[b] = 1, a;
}, {});
}
console.log(orgNums(arr));
关于javascript - 计算数组中的元素并将它们添加到对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39962678/