这个问题在这里已有答案:
例:
array = [{name:'Anna'}, {name:'Bob'}, {name:'Joe'}, {name:'Anna'}]
我需要按名称对这个数组进行分组,以获得单独的数组:
array 1 = [{name:'Anna'}, {name:'Anna'}]
array 2 = [{name:'Joe'}]
array 3 = [{name:'Bob'}]
不知道如何执行此操作。谢谢!
你的意思是按照我想的名称对项目进行分组,而不是对它们进行排序。
如果这是您想要的,您可以使用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)
首先按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));
只需使用reduce转换为基于值的对象:
const test = array.reduce((acc, el) => {
if (!acc[el.name]) {
return {
...acc,
[el.name]: [el]
}
}
return {
...acc,
[el.name]: [...acc[el.name], el]
}
}, {});
你有一个带有字段的对象,每个字段包含所请求的元素数组