Javascript 对象值的总和数组
Javascript Sum array of object values
我认为这是一个非常普遍和简单的问题,但我似乎找不到我要找的东西
如果我有
var array = [{"a":4,"b":5, "d":6}, {"a":4, "c":5}, {"c":4}]
如何对对象求和以获得
{"a":8,"b":5,"c":9, "d":6}
使用下划线、lodash 或其他相当快速和简单的东西 一个衬里?
你应该可以使用 reduce 这个
var compact = array.reduce(function(prev,cur){
for(var key in cur){
if(!cur.hasOwnProperty(key))continue;
if(prev.hasOwnProperty(key)){
prev[key] += cur[key];
}else{
prev[key] = cur[key];
}
}
return prev;
},{});
您可以试试这个解决方案:
var arr = [{"a":4,"b":5, "d":6}, {"a":4, "c":5}, {"c":4}];
var result = {};
arr.forEach(function(obj) {
for(var prop in obj) {
if(obj.hasOwnProperty(prop)) {
result[prop] = (result[prop] || 0) + obj[prop];
}
}
});
$('#result').text(JSON.stringify(result,null,2));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="result"></div>
_.merge
使用自定义回调可以:
var array = [{"a": 4, "b": 5, "d": 6}, {"a": 4, "c": 5}, {"c": 4}];
var result = _.merge.apply(null, array.concat([function(a, b) {
if (typeof a === 'number') {
return a + b;
}
}]));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.min.js"></script>
您可以组合 spread(), merge(), and add() 产生:
_.spread(_.merge)([{}].concat(array, _.add));
// → { a: 8, b: 5, d: 6, c: 13 }
从 lodash 4.0.0 开始,使用 mergeWith:
很简单
_.mergeWith({}, ...数组, _.add)
我认为这是一个非常普遍和简单的问题,但我似乎找不到我要找的东西
如果我有
var array = [{"a":4,"b":5, "d":6}, {"a":4, "c":5}, {"c":4}]
如何对对象求和以获得
{"a":8,"b":5,"c":9, "d":6}
使用下划线、lodash 或其他相当快速和简单的东西 一个衬里?
你应该可以使用 reduce 这个
var compact = array.reduce(function(prev,cur){
for(var key in cur){
if(!cur.hasOwnProperty(key))continue;
if(prev.hasOwnProperty(key)){
prev[key] += cur[key];
}else{
prev[key] = cur[key];
}
}
return prev;
},{});
您可以试试这个解决方案:
var arr = [{"a":4,"b":5, "d":6}, {"a":4, "c":5}, {"c":4}];
var result = {};
arr.forEach(function(obj) {
for(var prop in obj) {
if(obj.hasOwnProperty(prop)) {
result[prop] = (result[prop] || 0) + obj[prop];
}
}
});
$('#result').text(JSON.stringify(result,null,2));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="result"></div>
_.merge
使用自定义回调可以:
var array = [{"a": 4, "b": 5, "d": 6}, {"a": 4, "c": 5}, {"c": 4}];
var result = _.merge.apply(null, array.concat([function(a, b) {
if (typeof a === 'number') {
return a + b;
}
}]));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.min.js"></script>
您可以组合 spread(), merge(), and add() 产生:
_.spread(_.merge)([{}].concat(array, _.add));
// → { a: 8, b: 5, d: 6, c: 13 }
从 lodash 4.0.0 开始,使用 mergeWith:
很简单_.mergeWith({}, ...数组, _.add)