美文网首页前端笔试题试炼
一维数组按照id和parentId的映射关系构建成树

一维数组按照id和parentId的映射关系构建成树

作者: 我没事_就是有点难受 | 来源:发表于2021-08-30 20:06 被阅读0次

    根据 id和parentId相等的映射关系,打平数据构建tree数据
    例如一维数组
    [ {name: ‘A’, id: 0, parentId: null}, {name: ‘B’, id: 1, parentId: 0} ]
    想要这种结构 B是A的子集中的元素
    [ {name: ‘A’, id, parentId: null, children: [{name: ‘B’, id, parentId: null}]} ]

    传统做法 嵌套for循环遍历对比 略
    // map映射处理
    list = 
        [
            { id: 3, name: '节点C', parentId: 2 },
            { id: 6, name: '节点F', parentId: 5 },
            { id: 0, name: 'root', parentId: null },
            { id: 1, name: '节点A', parentId: 0 },
            { id: 8, name: '节点H', parentId: 7 },
            { id: 4, name: '节点D', parentId: 3 },
            { id: 2, name: '节点B', parentId: 1 },
            { id: 5, name: '节点E', parentId: 4 },
            { id: 7, name: '节点G', parentId: 6 },
            { id: 9, name: '节点I', parentId: 8 }
        ]
        const map = {};
        list.forEach(i => {
            map[i.id] = i;
        });
        const _list = [];
        list.forEach(i => {
            if(map[i.parentId]) {
                if(!map[i.parentId]?.children) {
                    map[i.parentId].children = [i];
                }else {
                    map[i.parentId].children.push(i);
                }
            }else if(!i.parentId){
                _list.push(i);
            }
        });
    
        console.log('_list', _list);
    
    结果
    image.png

    相关文章

      网友评论

        本文标题:一维数组按照id和parentId的映射关系构建成树

        本文链接:https://www.haomeiwen.com/subject/ssboiltx.html