1. 数据
let arr = [ {
id : 1 ,
name : '部门1' ,
pid : 0
} ,
{
id : 2 ,
name : '部门2' ,
pid : 1
} ,
{
id : 3 ,
name : '部门3' ,
pid : 1
} ,
{
id : 4 ,
name : '部门4' ,
pid : 3
} ,
{
id : 5 ,
name : '部门5' ,
pid : 4
} ,
{
id : 6 ,
name : '部门6' ,
pid : 100
} ,
]
2. 递归方法
const getChildren = ( data, result, pid) => {
data. forEach ( item => {
if ( item. pid === pid) {
const newItem = {
... item,
children: [ ]
} ;
result. push ( newItem) ;
getChildren ( data, newItem. children, item. id) ;
}
} )
}
const arrayToTreeRecursive = ( data, pid) => {
const result = [ ] ;
getChildren ( data, result, pid)
return result;
}
let res = arrayToTreeRecursive ( arr, 0 )
console . log ( res)
3. 遍历方法
function arrayToTree ( arr) {
const result = [ ] ;
const itemMap = { } ;
for ( const item of arr) {
itemMap[ item. id] = {
... item,
children: [ ]
}
}
for ( const item of arr) {
const id = item. id;
const pid = item. pid;
const treeItem = itemMap[ id] ;
if ( pid === 0 ) {
result. push ( treeItem) ;
}
else {
if ( ! itemMap[ pid] ) {
itemMap[ pid] = {
children: [ ] ,
}
}
console . log ( itemMap[ pid] ) ;
itemMap[ pid] . children. push ( treeItem)
}
}
return result;
}
console . log ( arrayToTree ( arr) )