如何按键对对象数组进行分组?

2022-02-26 00:00:00 logic javascript lodash
如何按对象键对对象数组进行分组,以根据分组创建新的对象数组? 例如,我有一个汽车对象数组:

const array = [
  {red: [ {height: 50} ]},
  {green: [ {height: 20} ]},
  {blue: [ {height: 30} ]},
  {blue: [ {height: 40} ]},
  {red: [ {height: 10} ]},
  {green: [ {height: 60} ]}
]

我要创建一个新的对象数组。(键为颜色)

const result = [
  {red: [{height: 50}, {height: 10}]},
  {green: [{height: 20}, {height: 60}]},
  {blue: [{height: 30}, {height: 40}]}
]

我尝试使用listash.groupBy,但是我根本不知道如何解决此问题。


解决方案

使用数组Reduce可以迭代数据并计算结果对象。

const array = [
  { 'red': [ { height: 50 } ] },
  { 'green': [ { height: 20 } ] },
  { 'blue': [ { height: 30 } ] },
  { 'blue': [ { height: 40 } ] },
  { 'red': [ { height: 10 } ] },
  { 'green': [ { height: 60 } ] }
];

const res = array.reduce((acc, element) => {
  // Extract key and height value array
  const [key, heightValue] = Object.entries(element)[0];
  // Get or create if non-exist, and push height value from array, index 0
  (acc[key] || (acc[key] = [])).push(heightValue[0]);
  return acc;
}, {});

console.log(res);

相关文章