最近面试有遇到这个问题,下面来说下我的解题思路把:
首先,一维数组想要转换成树形结构,那么这个一维数组各个对象之间是有联系的
let dataArr = [
{
id:1,
name:'爷爷',
pid:0
},
{
id:2,
name:'爸爸',
pid:1
},
{
id:3,
name:'伯伯',
pid:1
},
{
id:4,
name:'辉',
pid:2
},
{
id:5,
name:'军',
pid:3
},
]
从上面这个数组对象中,某个对象的pid与另一个对象的id是相同的,那么也就是这个对象是另一个对象的子集。
1、把每个数组对象挂载到新的对象上,有自己的唯一标识,也就是id;
2、遍历数组,根据pid判断哪个是最外层父级,如果有就判断有没有children,如果没有就push新数组,那么这个就是最外层父级。
var toTree = function(tarArray){
var obj = {}
tarArray.map((item,index)=>{
obj[item.id] = item
})
var newArr = [];
for(var i=0;i<tarArray.length;i++){
var item = tarArray[i]
var parent = obj[item.pid]
if(parent){
if(parent.children){
parent.children.push(item)
}else{
parent.children = []
parent.children.push(item)
}
}else{
newArr.push(item)
}
}
console.log(newArr)
}
toTree (dataArr )
好了,这样打印出来的newArr就是一个树形结构的数组了。