测试数据
let dataArr = [
{
"id": 1,
"pid": 0,
"name": '一级1.0.1'
},
{
"id": 2,
"pid": 0,
"name": '一级1.0.2'
},
{
"id": 3,
"pid": 1,
"name": '二级2.1.3'
},
{
"id": 7,
"pid": 1,
"name": '二级2.1.7'
},
{
"id": 6,
"pid": 7,
"name": '三级3.7.6'
},
{
"id": 5,
"pid": 7,
"name": '三级3.7.5'
},
];
数组转树结构:
要将数组转化为树形结构,需要用到递归算法,自身调用自身,条件不能一样,否则就会死循环
function arrayTotree(arr,rootvalue){
let newArr = [];
arr.forEach(item => {
if(item.pid===rootvalue){
//找到之后,就要看item下有没有子节点
//条件不能是(arr,rootvalue),否则死循环
const children = arrayTotree(arr,item.id);
if(children.length){
//children长度大于0,说明有子节点
item.children = children;
}
//把找到的数据内容加入数组中
newArr.push(item);
}
});
return newArr;
}
console.log(arrayTotree(dataArr,0))
树结构转一维数组:
let list = [];
function getList(treeData){
treeData.map((item,index)=>{
let {id,name,pid} = item
if(item.children!==undefined&&item.children.length>0){
getList(item.children)
}
list.push({id,name,pid})
})
return list;
}