javascript 平行结构转换成树

2020-10-15  本文已影响0人  aaagu1234
  1. 递归实现
    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;
    }
  1. 非递归实现
    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

上一篇 下一篇

猜你喜欢

热点阅读