如果我有一个如下所示的对象数组:
[{id:1,product:'widget',quantity:10}, {id:2,product:'foobar',quantity:5}, {id:3,product:'widget',quantity:5}]
JavaScript 中是否有一种优雅的方法来查找具有相同名称的对象,并将数量组合到第一个对象中,并删除其余的对象?
生成的数组将如下所示:
[{id:1,product:'widget',quantity:15}, {id:2,product:'foobar',quantity:5}]
现在我正在创建一个新数组,迭代现有数组,查找具有特定名称的所有内容,进行求和,然后将其转储到新数组中。这一切似乎过于复杂。我使用下划线来处理大量繁重的工作。
谢谢!
最佳答案
你可以groupBy产品然后 map结果组获得所需的结构。 Reduce用于对数量求和:
var groups = _.chain(data)
.groupBy('product')
.map( function(group){
return {
id: group[0].id,
product: group[0].product,
quantity: _.reduce(group, function(memo, value){ return memo + value.quantity; }, 0 )
}
})
.value();
关于javascript/下划线 : find objects by property in an array, 并将它们组合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25691622/