如何使用数组方法对数组中对象的属性求和

时间:2020-06-24 15:26:40

标签: javascript algorithm

我需要一些帮助,我试图通过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}
];

2 个答案:

答案 0 :(得分:1)

您可以使用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);

答案 1 :(得分:1)

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

let finalResult = arr.reduce((result, obj) => {
  if (result[obj.name]) {
    result[obj.name].number += obj.number || 0
  } else {
    result[obj.name] = { ...obj};
  }
  return result
}, {})

finalResult = Object.values(finalResult)

console.log(finalResult)