Javascript对象值的和数组

我会认为这是一个令人惊讶的常见和简单的问题,但我似乎无法find我在寻找什么

如果我有

var array = [{"a":4,"b":5, "d":6}, {"a":4, "c":5}, {"c":4}] 

我如何总结对象得到

 {"a":8,"b":5,"c":9, "d":6} 

使用下划线,lodash或相当快速和简单的一个class轮

你可以结合spread() , merge()和add()来产生:

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

你应该可以使用这个减less

 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; },{}); 

_.merge自定义callback会做:

 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> 

你可以试试这个解决scheme:

 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>