前端笔试题试炼

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

2021-08-30  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读