一维数组 转换为 树形数据结构

328 阅读1分钟

需转化的数据:

[{id: 10122,name:'顶级节点',parentId: 0},{id: 10123,name:'子类',parentId: 10122},{id: 10123,name:'孙类',parentId: 10122}]

目标数据:

[{
id: 10122,name:'顶级节点',parentId: 0,
children:[id: 10123,name:'子类',parentId: 10122,children:[{id: 10123,name:'孙类',parentId: 10122}]]
}]

转换数据的思路:
1、把数据转换为键名 为id 的对象 "{id:{item}}"
2、把每个项 添加 子项 (children)
3、把顶级的元素 放到指定数组

实现代码:

from(list = [], props = {id: 'id', parentId: 'parentId'}) {
        let map = {};
        let tree = [];

        list.forEach(item => {
            map[item[props.id]] = item;
        });

        list.forEach(item => {
            if (item[props.parentId] && map[item[props.parentId]]) {
                if (!Array.isArray(map[item[props.parentId]]['children'])) {
                    map[item[props.parentId]]['children'] = [];
                }
                map[item[props.parentId]]['children'].push(map[item[props.id]]);
            } else {
                tree.push(map[item[props.id]]);
            }
        });

        map = null;
        return tree;
    },