递归法
/**
* @param { array:arr } 原数组
* @param { number:pid } 父级id
*/
function ArrayToTree(arr,pid) {
const children = arr.filter(node=>node.pid == pid)
if(!children.length){
return []
}
return children.map(node=>({
...node,
children:ArrayToTree(arr,node.id)
}))
}
循环法
function tranListToTreeData(list) {
const arr = [];
const map = {};
list.forEach((item) => {
// 给list循环,补充一个children属性给一个空数组
item.children = [];
map[item.id] = item;
});
// 2.对list做 第二轮循环: 根据 pid 找 父子关系
list.forEach((item) => {
const father = map[item.pid]; // 当前item的上级
if (father) {
father.children.push(item);
} else {
arr.push(item);
}
});
return arr;
}