现有树关系(js对象表示)
[{
id:1,
pId:null,
children:[{
id:3,
pId:1,
children:[{
id:4,
pId:3
},{
id:5,
pId:3
}]
}]
},
{
id:2,
pId:null,
children:[{
id:3,
pId:2,
children:[{
id:4,
pId:3
},{
id:6,
pId:3
}]
}]
}]
返回的array递归数据如下
[{
id:1,
pId:null
},{
id:2,
pId:null
},{
id:3,
pId:1
},{
id:4,
pId:3
},{
id:5,
pId:3
},{
id:3,
pId:2
},{
id:4,
pId:3
},{
id:6,
pId:3
}]
仅依靠如上的数据结构是无法还原树关系的,因为出现了id1和id2 出现了同样的id3的子分支,仅依靠以上的数据结构是无法得知id4,id5,id6的所属情况的,
解决方案如下
加入递归路径即可
[{
id:1,
pId:null,
path:'1'
},{
id:2,
pId:null,
path:'2'
},{
id:3,
pId:1,
path:'1,3'
},{
id:4,
pId:3,
path:'1,3,4'
},{
id:5,
pId:3,
path:'1,3,5'
},{
id:3,
pId:2,
path:'2,3'
},{
id:4,
pId:3,
path:'2,3,4'
},{
id:6,
pId:3,
path:'2,3,6'
}]
以上数据格式包含了递归路径,明确了各对象在树结构中具体的位置,因此可以还原出树关系,还原关键父子节点的查找变成了子节点path路径去除最后一位后找到同样path的节点为父节点,例如path236就是path23的子节点