<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
let data = [
{id: 1, name:'节点1', pid: ''},
{id: 11, name:'节点1-1', pid: 1},
{id: 12, name:'节点1-2', pid: 1},
{id: 2, name:'节点2', pid: ''},
{id: 21, name:'节点2-1', pid: 2},
{id: 211, name:'节点2-1-1', pid: 21}
]
//方式1 不用递归
// 找孩纸
data.forEach(t=>{
let children=data.filter(item=>item.id===t.id)
if(children&&children.length>0){
t.children=children
}
})
// 2.返回根节点
let result =data.filter(t=>t.pid==='')
console.log(result);
//递归函数调用
function tranListToTreeData(list,rootValue){
let arr=[]
list.forEach(t=>{
if(t.pid===rootValue){
let children =tranListToTreeData(list,t.id)
if(children){
t.children=children
}
arr.push(t)
}
})
// 返回根节点
return arr
}
let result2 =tranListToTreeData(data,'')
console.log(result2);
</script>
</body>
</html>
js扁平数据转树形数据高效率算法
于 2022-01-19 14:32:58 首次发布