【问题标题】:How to sum properties of objects in array using array methods [duplicate]如何使用数组方法对数组中对象的属性求和
【发布时间】:2020-10-14 22:05:45
【问题描述】:

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

【问题讨论】:

  • reduce 是您所需要的一切
  • 我知道,但我想了解如何应用 reduce

标签: javascript algorithm


【解决方案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)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多