繁体   English   中英

Javascript对象值的Sum数组

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

您可以组合spread()merge()add()来生成:

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

你可以尝试这个解决方案:

 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> 

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM