首页 > 解决方案 > 如何使用数组方法对数组中对象的属性求和

问题描述

我需要一些帮助,我试图通过 name 属性合并这些对象,但我被卡住了,我试图通过数组方法而不是 for 循环来解决这个问题。

var arr = [
  {name: 'lucas', number: 20}, 
  {name: 'lucas', number: 22},
  {name: 'luna', number: 10}, 
  {name: 'luna', number: 23},
  {name: 'diego', number: 15}
];
          

var expectedOutput = [
  {name: 'lucas', number: 42},
  {name: 'luna', number: 33},
  {name: 'diego', number: 15}
];

标签: javascriptalgorithm

解决方案


您可以利用reduce并采取Object.values以获得预期的输出。这是工作示例:

var arr = [{name: 'lucas', number: 20},  {name: 'lucas', number: 22}, {name: 'luna', number: 10} , {name: 'luna', number: 23}, {name: 'diego', number: 15}];

var result = Object.values(arr.reduce((acc, {name, number})=>{
   acc[name] = acc[name] || {name, number:0};
   acc[name].number+=number;
   return acc;
},{}));

console.log(result);


推荐阅读