树形结构,根据parentid(parent_id)父子ID生成树形节点
某次遇一项目需求,根据parent_id生成树结构,分两种情况,第一种是有一个总的parent_id为0的情况,树顶级节点就是parent_id为0的节点;还有一种情况就是平级,没有总的parent_id为0的情况; 度娘了很多,没发现类似的,只能自己写个递归方法,具体数据如下:
第一种数据:
[
{id: "27970285570", name: "IT", parent_id: "0"},
{id: "27697655810", name: "IT-IT3", parent_id: "27970285570"},
{id: "27794124801", name: "IT-IT4", parent_id: "27970285570"},
{id: "27815096322", name: "IT-IT2", parent_id: "27970285570"},
{id: "27928342530", name: "IT-IT1", parent_id: "27970285570"},
{id: "27936731137", name: "IT-IT5", parent_id: "27970285570"},
{id: "27987062786", name: "IT-IT6", parent_id: "27970285570"},
{id: "27634741251", name: "IT-IT2-1", parent_id: "27815096322"},
{id: "27932536834", name: "IT-IT2-2", parent_id: "27815096322"}
]
需要组合成如下格式:
第二种数据:[
{id: "12345678905456",name: "IT-IT2-1",parent_id: "2256455"},
{id: "12345678901459",name: "IT-IT2-1-A",parent_id: "12345678905456"},
{id: "12345678905454",name: "IT-IT2-2",parent_id: "2256452"},
{id: "12345678905453",name: "IT-IT2-3",parent_id: "2256451"}
]
需要组合成如下格式:
递归方法附上:
function getTrees(list, parent_id = 0) {
let parentObj = {};
list.forEach(o => {
parentObj[o.id] = o;
})
if(!parent_id){
return list.filter(o => !parentObj[o.parent_id]).map(o => (o.children = getTrees(list, o.id), o));
}else{
return list.filter(o => o.parent_id == parent_id).map(o => (o.children = getTrees(list, o.id), o));
}
};
一个递归方法即可解决parentid拼树结构。