Javascript对象值的总和数组

时间:2015-08-20 23:27:40

标签: 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或其他相当快速且简单的一个班轮

5 个答案:

答案 0 :(得分:5)

您应该能够reduce使用此

/home

答案 1 :(得分:3)

带有自定义回调的

_.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>
&#13;
&#13;
&#13;

答案 2 :(得分:3)

您可以合并spread()merge()add()来制作:

_.spread(_.merge)([{}].concat(array, _.add));
// → { a: 8, b: 5, d: 6, c: 13 }

答案 3 :(得分:2)

您可以尝试此解决方案:

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>

答案 4 :(得分:0)

从lodash 4.0.0开始,使用mergeWith很简单:

_。mergeWith({},... array,_.add)