使用js的reduce()一维数组根据相同id转化二维数组
时间: 2023-10-19 08:07:22 浏览: 208
假设有一个包含多个对象的一维数组,每个对象都有一个id属性,现在需要根据相同的id将这些对象分组成二维数组。可以使用JavaScript的reduce()方法来实现这个功能。
具体的实现步骤如下:
1. 使用reduce()方法初始化一个空对象,用于存储分组后的结果。
2. 遍历一维数组的每个元素,在回调函数中判断该元素的id属性是否已经存在于结果对象中,如果不存在,则将该元素的id属性作为结果对象的key,同时将该元素作为value存储在结果对象中。如果已经存在,则将该元素添加到对应的key的value数组中。
3. 最后,将结果对象中所有的value数组取出来,组成一个二维数组即可。
下面是代码示例:
```javascript
const arr = [
{id: 1, name: 'A'},
{id: 1, name: 'B'},
{id: 2, name: 'C'},
{id: 3, name: 'D'},
{id: 3, name: 'E'},
];
const result = Object.values(arr.reduce((acc, cur) => {
if (!acc[cur.id]) {
acc[cur.id] = {id: cur.id, values: [cur]};
} else {
acc[cur.id].values.push(cur);
}
return acc;
}, {}));
console.log(result);
// Output: [
// {id: 1, values: [{id: 1, name: 'A'}, {id: 1, name: 'B'}]},
// {id: 2, values: [{id: 2, name: 'C'}]},
// {id: 3, values: [{id: 3, name: 'D'}, {id: 3, name: 'E'}]}
// ]
```
以上代码中,使用reduce()方法初始化了一个空对象{},然后在遍历每个元素时,判断该元素的id属性是否已经存在于该对象中,如果不存在,则将该元素的id属性作为key,同时将该元素作为value存储在该对象中;如果已经存在,则将该元素添加到对应的value数组中。最后,使用Object.values()方法将该对象中所有的value数组取出来,组成一个二维数组返回。
阅读全文