【问题标题】:Sum properties array of Objects [duplicate]对象的总和属性数组[重复]
【发布时间】:2018-06-19 10:44:48
【问题描述】:

我有一个对象数组,例如:

 [{
      name: 'mike',
      id: 3312,
      points: 2,
      summary: 'example',
  }, {
      name: 'andrew',
      id: 4123,
      points: 1,
      summary: 'example',
  }, {
      name: 'mike',
      id: 0522,
      points: 5,
      summary: 'example',
  }]

我需要总结每个人的分数,我面临的问题是有超过 50 个不同的人名,所以我不能做这样的事情

for (let i = 0; i < issues.length; i++) {
    if (issues[i].name == 'mike') {
        //////////////////////
    }
}

因为以后的 API 可以返回一个new Person

【问题讨论】:

  • 有不同的id 值。这是否意味着主键将是name
  • 预期输出是什么?
  • @Praveen Kumar,是的,我从问题 ID 中得到的 ID,每个对象都不同!
  • 嗨!您似乎在这方面取得了良好的开端,但您在中间停了下来。您需要实际总结这些值。你最好的选择是这样做(以及任何必要的研究,search 用于 SO 的相关主题等)。 如果您在进行更多研究和搜索后遇到困难并且无法摆脱困境,请发布您的尝试minimal reproducible example,并具体说明您卡在哪里。人们会很乐意提供帮助。祝你好运!
  • 这个问题已经被问了好几次了,所以彻底的搜索会找到答案。

标签: javascript arrays


【解决方案1】:

您可以将reduce 插入到由name 索引的对象中:

const input = [{
   name: 'mike',
   id: 3312,
   points: 2,
   summary: 'example',
},
{
   name: 'andrew',
   id: 4123,
   points: 1, 
   summary: 'example',
},
{
   name: 'mike',
   id: 0522,
   points: 5,
   summary: 'example',
}];
const points = input.reduce((a, { name, points }) => (
  Object.assign(a, { [name]: (a[name] || 0) + points })
), {});
console.log(points);

【讨论】:

    【解决方案2】:

    如果您不想使用reduce 并保持简单,您仍然可以使用forEach 循环,如下所示:

    const input = [{
       name: 'mike',
       id: 3312,
       points: 2,
       summary: 'example',
    },
    {
       name: 'andrew',
       id: 4123,
       points: 1, 
       summary: 'example',
    },
    {
       name: 'mike',
       id: 0522,
       points: 5,
       summary: 'example',
    }];
    
    var res = {};
    
    input.forEach((obj) => {
      res[obj.name] = res[obj.name] ? res[obj.name]+obj.points : obj.points;
    });
    
    
    console.log(res);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-08
      • 2022-01-24
      • 2020-01-01
      • 1970-01-01
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      相关资源
      最近更新 更多