Javascript:重构对象数组而不覆盖键

时间:2019-01-24 00:57:26

标签: merge refactoring assign spread-syntax

我有一个要重构的对象数组(构造不同的结构)。

现有数组:

[ 0: { category: 100 },
  1: { category: 101 },
  2: { category: 102 },
  3: { tag: 200 },
  4: { tag: 201 },
  5: { tag: 202 },
  6: { year: 300 },
  7: { year: 301 },
  8: { year: 302 } 
]

想要的数组:

[ 0: { category: [ 100, 101, 102 ] },
  1: { tag: [ 200, 201, 202 ] },
  2: { year: [ 300, 301, 302 ] } 
]

任何帮助将不胜感激。欢迎使用ES6语法。

1 个答案:

答案 0 :(得分:1)

使用Array.prototype.reduce

let input = [{ category: 100 },
{ category: 101 },
{ category: 102 },
{ tag: 200 },
{ tag: 201 },
{ tag: 202 },
{ year: 300 },
{ year: 301 },
{ year: 302 } 
];

let output = input.reduce((acc, curr) => {
  let key = Object.keys(curr)[0];
  acc[key] = acc[key] ? [curr[key], ...acc[key]] : [curr[key]];
  return acc;
}, {});
console.log(output)