示例:
array = [{name:'Anna'}, {name:'Bob'}, {name:'Joe'}, {name:'Anna'}]
我需要按名称对数组进行分组,以获得单独的数组,例如:
array 1 = [{name:'Anna'}, {name:'Anna'}]
array 2 = [{name:'Joe'}]
array 3 = [{name:'Bob'}]
不知道如何执行此操作。谢谢!
答案 0 :(得分:2)
首先按name
对数组进行分组,然后获取对象值。为此,您可以使用Array.reduce
和Object.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));
答案 1 :(得分:1)
您的意思是按我认为的名称对项目进行分组,而不是对它们进行排序。
如果这是您想要的,则可以使用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 :(得分: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]
}
}, {});
您有一个带有字段的对象,每个字段都包含请求的元素数组