Javsacript。如何操纵对象数组,以便将具有相同元素的元素分组?

时间:2019-10-05 05:07:48

标签: javascript arrays

我有一个类似下面的数组,我将从MongoDB中获取它:

[
  {date: '2019-10-05', score: 3},
  {date: '2019-10-05', score: 5},
  {date: '2019-10-06', score: 4},
  {date: '2019-10-06', score: 1},
]

我需要制作一个新数组,如下所示:

[
  {date: '2019-10-05', score: [3,5]},
  {date: '2019-10-06', score: [4,1]}
]

根据日期属性将分数基本分组到相同的数组中。任何实现此目的的建议都值得赞赏。

1 个答案:

答案 0 :(得分:1)

您可以使用.reduce()Object.values()获得所需的输出:

const data = [
  {date: '2019-10-05', score: 3}, {date: '2019-10-05', score: 5},
  {date: '2019-10-06', score: 4}, {date: '2019-10-06', score: 1},
];

const result = Object.values(
  data.reduce((r, c) => {
    r[c.date] = r[c.date] || {...c, score: []};
    r[c.date].score.push(c.score);
    return r;
  }, {})
);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }