- 递归实现
function getTrees(list, parentId) {
let items = {};
for (let i = 0; i < list.length; i++) {
let key = list[i].pid;
(items[key] || (items[key] = [])).push(list[i]);
}
return formatTree(items, parentId);
}
function formatTree(items, parentId) {
let tree = [];
if (!items[parentId]) {
return tree;
}
for (let item of items[parentId]) {
item.children = formatTree(items, item.id)
tree.push(item);
}
return tree;
}
- 非递归实现
function formatTree(list) {
let obj = {}, trees = [];
list.forEach(item => {
obj[item.id] = item;
})
list.forEach(item => {
let parent = obj[item.pid];
if (parent) (parent.children || (parent.children = [])).push(item);
else trees.push(item)
})
return trees;
}
https://segmentfault.com/a/1190000022261981
网友评论