数组转树状结构

411 阅读1分钟

在实际开发过程中经常会遇到在页面中渲染树状结构数据,数据库存储的数据一般都是单个节点信息和父节点的信息。前端获取到的数据可能是由这些节点数据组成的一维数组,可以用以下函数转换为树状层级的数据。

function dataToTree(data,key='id',parent='parent'){
    // 参数data:传入数据,参数key:数据的唯一标识,参数parent:父节点id值
    const tree=[]
    const map={}
    data.forEach(item => map[item[key]] = item);

        for (const item of data) {
            let pid = item[parent];

            // 顶层对象
            if(pid == 0) {
                tree.push(item);
            } else {
                let parentItem = map[pid];
                if(!parentItem.children){
                    parentItem.children = [];
                }
                parentItem.children.push(item);
            }
        }
    return tree
   }

注:输入数据要包含父节点id。

const data = [{pid:0,id:001,value:'item1'},]