有人能向我解释一下这种情况吗?
在第二次调用该函数时,结果是{cat: 2, cat,cat: 1, dog: 1, frog: 1}
。
然而,我认为结果应该是{cat: 4, dog: 1, frog: 1}
。
这里到底发生了什么?
var animals = ['cat', 'cat', ['cat'], 'dog', 'frog'];
var otherAnimals = ['cat', 'cat', ['cat', 'cat'], 'dog', 'frog'];
function reducingArrays(arraySource) {
var countedData = arraySource.reduce(function(allItems, item) {
if (item in allItems) {
allItems[item]++;
} else {
allItems[item] = 1;
}
return allItems;
}, {});
console.log(countedData);
}
reducingArrays(animals); // {cat: 3, dog: 1, frog: 1}
reducingArrays(otherAnimals); // {cat: 2, cat,cat: 1, dog: 1, frog: 1}
// What I expected: {cat: 4, dog: 1, frog: 1}
['cat']
转换为'cat'
。['cat','cat']
转换为'cat,cat'
。你正在使用数组作为对象键,因此将其转换为字符串。你需要一种递归函数。 - Niet the Dark Absol[].concat(...arr)
来展开一个数组。 - Andy