【发布时间】:2017-03-15 16:10:03
【问题描述】:
我正在尝试对集合中的值求和并将它们添加到每个对象的新属性中
var collection = [
{prop:'title',quan:2},
{prop:'body',quan:3},
{prop:'title',quan:2},
{prop:'title',quan:4},
]
/* desired result
[
{prop:'title', quan:2, stock:8},
{prop:'body', quan:3, stock:3},
{prop:'title', quan:2, stock:8},
{prop:'title', quan:4, stock:8},
]
*/
我尝试了许多不同的方法,但都没有成功。我正在尝试以一种实用的方式来做到这一点。
这是我目前卡住了,我很确定这是最简洁的方式。
// group the props using key
var result = _.groupBy(collection,'prop');
哪个输出
{
title:[
{prop:'title',quan:2},{prop:'title',quan:2},{prop:'title',quan:4}
],
body:[
{prop:'body':quan:3}
]
}
所以让我们减少我们创建的数组
var obj = {};
_.forEach(result,function(value,key){
obj[key] = _.reduce(value,function(acc,val){
return acc.quan + val.quan
});
});
上面的这部分不起作用?
当我完成这项工作时,我应该能够将其映射回我的最终收藏。
我们知道总数,将它们映射到集合
var final = _.map(collection,function(value){
return {
type:value.prop,
val:value.quan,
stock:obj[value.prop]
}
});
【问题讨论】:
-
“我正在尝试以一种实用的方式来做这件事。” – 那么你不应该改变你的输入,fwiw
-
@noamik 我已经阅读了一些资料,因为您提到数据不应该被变异并且现在对函数式编程有了更好的理解,尽管您的回答仍然有点超出我的理解。
标签: javascript functional-programming