谁能给我解释一下这种情况?
第二次调用该函数,结果为{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}
最佳答案
您可以将单个元素转换为数组:
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) {
var arr = Array.isArray(item) ? item : [item];
allItems[arr[0]] = (allItems[arr[0]] || 0) + arr.length;
return allItems;
}, {});
console.log(countedData);
}
reducingArrays(animals);
reducingArrays(otherAnimals);
关于javascript - Javascript 中 reduce 方法的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48444511/