对象值的Javascript求和数组
我认为这是一个令人惊讶的普通和简单的问题,但我似乎找不到我想要的 如果我有对象值的Javascript求和数组,javascript,node.js,underscore.js,lodash,Javascript,Node.js,Underscore.js,Lodash,我认为这是一个令人惊讶的普通和简单的问题,但我似乎找不到我想要的 如果我有 var array = [{"a":4,"b":5, "d":6}, {"a":4, "c":5}, {"c":4}] 如何将对象求和以得到 {"a":8,"b":5,"c":9, "d":6} 使用下划线、lodash或一些相当快速和简单的一行?您应该能够使用它 您可以尝试以下解决方案: var-arr=[{“a”:4,“b”:5,“d”:6},{“a”:4,“c”:5},{“c”:4}]; var result
var array = [{"a":4,"b":5, "d":6}, {"a":4, "c":5}, {"c":4}]
如何将对象求和以得到
{"a":8,"b":5,"c":9, "d":6}
使用下划线、lodash或一些相当快速和简单的一行?您应该能够使用它
您可以尝试以下解决方案:
var-arr=[{“a”:4,“b”:5,“d”:6},{“a”:4,“c”:5},{“c”:4}];
var result={};
arr.forEach(功能(obj){
用于(obj中的var prop){
if(对象拥有自己的财产(财产)){
结果[prop]=(结果[prop]| 0)+obj[prop];
}
}
});
$('#result').text(JSON.stringify(result,null,2))代码>
使用自定义回调可以:
var数组=[{“a”:4,“b”:5,“d”:6},{“a”:4,“c”:5},{“c”:4}];
var result=\ uu0.merge.apply(null,array.concat([函数(a,b)){
如果(a的类型=='number'){
返回a+b;
}
}]));
控制台日志(结果)代码>
您可以组合并生成:
_.spread(_.merge)([{}].concat(array, _.add));
// → { a: 8, b: 5, d: 6, c: 13 }
从lodash 4.0.0开始,这很简单,使用:
_.mergeWith({},…array,u.add)谢谢你的回答,特拉维斯。有没有办法用下划线或lodash来实现这一点?@Leon:下划线有。如果你不想使用标准JavaScript,可以减少。这会变异数组的第一个元素,仅供参考。@AdamBoduch:true。应该可以通过在开始时注入一个空对象来解决。不知道它是如何工作的,但这是一个使用lodash的绝妙解决方案。任何人都可以解释它是如何工作的。我不明白concat
如何帮助添加值。
_.spread(_.merge)([{}].concat(array, _.add));
// → { a: 8, b: 5, d: 6, c: 13 }