js中对象数组根据对象id分组并转map
如果要将具有相同 id 属性的对象元素,分成不同的数组。
可以先从对象数组中提取相同的 id 属性,再使用 Array.reduce() 和 Map 来进行对象数组的分类。
具体实现:
// 对象数组根据id分组并转map
const arr = [
{ id: 1, name: 'apple' },
{ id: 2, name: 'banana' },
{ id: 3, name: 'orange' },
{ id: 1, name: 'pear' },
{ id: 2, name: 'grape' }
];
const map = arr.reduce((acc, item) => {
// 判断当前 id 在 map 对象是否已新建数组,如果没有,则新建一个空数组
if (!acc.has(item.id)) {
acc.set(item.id, []);
}
// 将当前元素推入对应的数组
acc.get(item.id).push(item);
return acc;
}, new Map());
console.log(map.get(1)); // [{ id: 1, name: 'apple' }, { id: 1, name: 'pear' }]
console.log(map.get(2)); // [{ id: 2, name: 'banana' }, { id: 2, name: 'grape' }]
console.log(map.get(3)); // [{ id: 3, name: 'orange' }]
// 遍历此map
for (const [key, value] of map.entries()) {
console.log(`${key}: ${JSON.stringify(value)}`);
}