functiontransformTree(list){
const tree =[]for(let i =0, len = list.length; i < len; i++){
if(!list[i].pid){
const item =queryChildren(list[i], list)
tree.push(item)}}return tree
}functionqueryChildren(parent, list){
const children =[]for(let i =0, len = list.length; i < len; i++){
if(list[i].pid === parent.id){
const item =queryChildren(list[i], list)
children.push(item)}}if(children.length){
parent.children = children
}return parent
}
2. 使用map遍历一次
functiontransformTree(list, options ={
}){
const{
keyField ='id',
childField ='children',
parentField ='parent'}= options
const tree =[]const record ={
}for(let i =0, len = list.length; i < len; i++){
const item = list[i]const id = item[keyField]if(!id){
continue}if(record[id]){
item[childField]= record[id]}else{
item[childField]= record[id]=[]}if(item[parentField]){
const parentId = item[parentField]if(!record[parentId]){
record[parentId]=[]}
record[parentId].push(item)}else{
tree.push(item)}}return tree
}