Underscore.js _.reduce() 到 return 个对象
Underscore.js _.reduce() to return objects
我正在尝试创建一个列表,该列表显示有多少家商店出售一系列商店中的给定商品。 stores
数组中的单个对象可以包含一堆不同的属性(名称、位置等),但我只是想挑选出库存(它们携带的物品类型数组,而不是实际库存编号-- 看起来像 ['hammers', 'wrenches', 'screw drivers'
),并创建一个对象,其中每个项目都是包含计数的 属性。
//simplified stores array for reference
stores = [
{ name: "Al's Hardware", inventory: ['hammers', 'wrenches'] },
{ name: "House Depot", inventory: ['wrenches', 'hammers', 'screw drivers'] },
{ name: "Grove Hardware", inventory: ['wrenches', 'screw drivers'] }
];
var itemCount = _(stores).chain()
.map(store => store.inventory)
.flatten()
.reduce((list, item) => list[item] = (list[item] || 0) + 1, {})
.value();
console.log(itemCount['hammers']); //Expected: 2; Actual: undefined
console.log(itemCount); //Expected: object containing all names and values; Actual: 1
还不确定我做错了什么,但我猜这与我尝试使用 _.reduce() 的方式有关。但是,在这一点上我有点迷茫,所以我不确定下一步该尝试什么。
我确定这是我想要的结构(我不是在寻找解决方法),我只是好奇我正在做什么来使 reduce 明显中断,以及如何将其更改为正常工作所以它会给我返回看起来像
的东西
{'hammers': 2,
'wrenches': 3,
'screw drivers': 2}
等等
.reduce
的回调应该 return initialValue
即空对象,如果你不使用箭头函数,你所做的就像
.reduce(function (list, item) {
return list[item] = (list[item] || 0) + 1
}, {})
应该是
.reduce(function (list, item) {
list[item] = (list[item] || 0) + 1
return list
}, {})
如果你想要一个衬垫,你可以使用
.reduce((list, item) => (list[item] = (list[item] || 0) + 1, list), {})
例子
console.log(['a', 'a', 'b', 'c'].reduce((list, item) => (list[item] = (list[item] || 0) + 1, list), {}))
我正在尝试创建一个列表,该列表显示有多少家商店出售一系列商店中的给定商品。 stores
数组中的单个对象可以包含一堆不同的属性(名称、位置等),但我只是想挑选出库存(它们携带的物品类型数组,而不是实际库存编号-- 看起来像 ['hammers', 'wrenches', 'screw drivers'
),并创建一个对象,其中每个项目都是包含计数的 属性。
//simplified stores array for reference
stores = [
{ name: "Al's Hardware", inventory: ['hammers', 'wrenches'] },
{ name: "House Depot", inventory: ['wrenches', 'hammers', 'screw drivers'] },
{ name: "Grove Hardware", inventory: ['wrenches', 'screw drivers'] }
];
var itemCount = _(stores).chain()
.map(store => store.inventory)
.flatten()
.reduce((list, item) => list[item] = (list[item] || 0) + 1, {})
.value();
console.log(itemCount['hammers']); //Expected: 2; Actual: undefined
console.log(itemCount); //Expected: object containing all names and values; Actual: 1
还不确定我做错了什么,但我猜这与我尝试使用 _.reduce() 的方式有关。但是,在这一点上我有点迷茫,所以我不确定下一步该尝试什么。
我确定这是我想要的结构(我不是在寻找解决方法),我只是好奇我正在做什么来使 reduce 明显中断,以及如何将其更改为正常工作所以它会给我返回看起来像
的东西{'hammers': 2,
'wrenches': 3,
'screw drivers': 2}
等等
.reduce
的回调应该 return initialValue
即空对象,如果你不使用箭头函数,你所做的就像
.reduce(function (list, item) {
return list[item] = (list[item] || 0) + 1
}, {})
应该是
.reduce(function (list, item) {
list[item] = (list[item] || 0) + 1
return list
}, {})
如果你想要一个衬垫,你可以使用
.reduce((list, item) => (list[item] = (list[item] || 0) + 1, list), {})
例子
console.log(['a', 'a', 'b', 'c'].reduce((list, item) => (list[item] = (list[item] || 0) + 1, list), {}))