我有一个数组,数据,有几个重复的项目。我正在尝试在数组上使用reduce方法返回包含每个项目的对象以及该项目在 data 数组中出现的次数。
第一个缩小功能正常工作。第二个,我想出的那个,在我看来是相同的,除了检查if(!obj[item])
我正在用else块检查if(obj[item])
。我无法弄清楚这两种解决方案是如何不同的,尽管它们必须......似乎我的(obj[item])
从来都不是真的,因为每个项目的数量我得到0。
const data = ['car', 'car', 'truck', 'truck', 'bike', 'walk', 'car', 'van', 'bike', 'walk', 'car', 'van', 'car', 'truck'];
const transportation = data.reduce((obj, item) => {
if (!obj[item]) {
obj[item] = 0;
}
obj[item]++;
return obj;
}, {});
console.log(transportation); // {car: 5, truck: 3, bike: 2, walk: 2, van: 2}
var instances = data.reduce((totalObj, item) => {
if (totalObj[item]) {
totalObj[item]++;
} else {
totalObj[item] = 0;
}
return totalObj;
}, {});
console.log(instances); // {car: 0, truck: 0, bike: 0, walk: 0, van: 0}
答案 0 :(得分:3)
您需要使用1
初始化该属性,因为您要计算并且归零falsy。
totalObj[item] = 1;
const data = ['car', 'car', 'truck', 'truck', 'bike', 'walk', 'car', 'van', 'bike', 'walk', 'car', 'van', 'car', 'truck' ];
var instances = data.reduce((totalObj, item) => {
if (totalObj[item]) {
totalObj[item]++;
} else {
totalObj[item] = 1;
}
return totalObj;
}, {});
console.log(instances);