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