如何将对象数组分组以按对象值分隔数组? [重复]

问题描述 投票:0回答:3

这个问题在这里已有答案:

例:

array  = [{name:'Anna'}, {name:'Bob'}, {name:'Joe'}, {name:'Anna'}]

我需要按名称对这个数组进行分组,以获得单独的数组:

array 1 = [{name:'Anna'}, {name:'Anna'}]
array 2 = [{name:'Joe'}]
array 3 = [{name:'Bob'}]

不知道如何执行此操作。谢谢!

javascript ecmascript-6
3个回答
2
投票

你的意思是按照我想的名称对项目进行分组,而不是对它们进行排序。

如果这是您想要的,您可以使用Array.reduce()创建一个中间字典,其键是名称,值是对所有具有相同名称的对象进行分组的数组。

然后使用Object.values()枚举此字典并返回所有组:

const arr = [{name:'Anna', hello: 1}, {name:'Bob'}, {name:'Joe'}, {name:'Anna'}];

const result = Object.values(arr.reduce((acc, x) => {
  acc[x.name] = [...(acc[x.name] || []), x ];
  return acc;
}, {}));

console.log(result)

2
投票

首先按name对数组进行分组,然后获取对象值。你可以使用Array.reduceObject.values来达到这个目的

var array  = [{name:'Anna'}, {name:'Bob'}, {name:'Joe'}, {name:'Anna'}];

const res = array.reduce((acc, item) => {
   if (acc[item.name]) {
      acc[item.name] = [...acc[item.name], item];
   } else {
      acc[item.name] = [item];
   }
   return acc;
}, {});

console.log(Object.values(res));

0
投票

只需使用reduce转换为基于值的对象:

const test = array.reduce((acc, el) => {
  if (!acc[el.name]) {
    return {
       ...acc,
       [el.name]: [el]
    }
  }
  return {
    ...acc,
    [el.name]: [...acc[el.name], el]
  }
}, {});

你有一个带有字段的对象,每个字段包含所请求的元素数组

© www.soinside.com 2019 - 2024. All rights reserved.