数组转换树结构

nest:根据parent_id生成树结构(阿里一面真题)

题目要求:

根据每项的parent_id,生成具体的树形结构对象

实现

(为方便,所有函数均用箭头函数)

首先肯定要根据提供的parent_id来进行数组的筛选,可以选择for(){}foreach(),但是这里可以使用数组的新方法filter(),更为方便~

1
items.filter(item => item[link] === id) // 注意===要求类型必须相等

然后将筛选出来的数组放到一起,再将parent_id指向它们的数组进行合并并放到一起,这里一样可以用for(){} , foreach(),但是我们还是使用新方法map()

1
2
3
4
items.map(item => ({
...item,
children : //=>这个地方可以进行递归调用封装的函数
}))

实现方式想到了就可以封装函数了

1
2
3
4
5
6
7
const nest = (items , id=null , link='parent_id') => 
items
.filter(item => item[link] === id)
.map(item => ({
...item,
children : nest(items , item.id)
}))

测试一下

1
2
3
4
5
6
7
8
/*测试用例*/
const comments = [
{ id: 1, parent_id: null },
{ id: 2, parent_id: 1 },
{ id: 3, parent_id: 1 },
{ id: 4, parent_id: 2 },
{ id: 5, parent_id: 4 }
];

结果:


关于map()filter()

filter()map()都不会对空数组进行检测且不会改变原数组



数组转换树结构
https://moewang0321.github.io/2019/10/08/2019-10-18-生成树/
作者
Moe Wang
发布于
2019年10月8日
许可协议