Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对象值的Javascript求和数组_Javascript_Node.js_Underscore.js_Lodash - Fatal编程技术网

对象值的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 }