1
+ // 使用递归的方式实现
2
+ const data = [
3
+ { id : '01' , name : '张大大' , pid : '' , job : '项目经理' } ,
4
+ { id : '02' , name : '小亮' , pid : '01' , job : '产品leader' } ,
5
+ { id : '03' , name : '小美' , pid : '01' , job : 'UIleader' } ,
6
+ { id : '04' , name : '老马' , pid : '01' , job : '技术leader' } ,
7
+ { id : '05' , name : '老王' , pid : '01' , job : '测试leader' } ,
8
+ { id : '06' , name : '老李' , pid : '01' , job : '运维leader' } ,
9
+ { id : '07' , name : '小丽' , pid : '02' , job : '产品经理' } ,
10
+ { id : '08' , name : '大光' , pid : '02' , job : '产品经理' } ,
11
+ { id : '09' , name : '小高' , pid : '03' , job : 'UI设计师' } ,
12
+ { id : '10' , name : '小刘' , pid : '04' , job : '前端工程师' } ,
13
+ { id : '11' , name : '小华' , pid : '04' , job : '后端工程师' } ,
14
+ { id : '12' , name : '小李' , pid : '04' , job : '后端工程师' } ,
15
+ { id : '13' , name : '小赵' , pid : '05' , job : '测试工程师' } ,
16
+ { id : '14' , name : '小强' , pid : '05' , job : '测试工程师' } ,
17
+ { id : '15' , name : '小涛' , pid : '06' , job : '运维工程师' }
18
+ ]
19
+
20
+ // 用reduce实现方式
21
+ // function toTree(arr, parentId){
22
+ // function dp(parId) {
23
+ // return arr.reduce((acc, cur) => {
24
+ // if(cur.pid === parId) {
25
+ // cur.children = dp(cur.id)
26
+ // acc.push(cur)
27
+ // }
28
+ // return acc
29
+ // }, [])
30
+ // }
31
+ // return dp(parentId)
32
+ // }
33
+
34
+ // 用for循环
35
+ function toTree ( arr , parentId ) {
36
+ function dp ( parId ) {
37
+ let res = [ ]
38
+ for ( let i = 0 ; i < arr . length ; i ++ ) {
39
+ const item = arr [ i ] ;
40
+ if ( item . pid === parId ) {
41
+ item . children = dp ( item . id )
42
+ res . push ( item )
43
+ }
44
+ }
45
+ return res
46
+ }
47
+ return dp ( parentId )
48
+ }
49
+
50
+
51
+ console . log ( toTree ( data , '' ) )
0 commit comments