树型数据结构化处理
有时候后台返回的数据需要自己处理,例:如下数据,let data = [{id: 1,title: '飞蛾扑火',pid: 0},{id: 2,title: '你就像一只扑火的飞蛾',pid: 1},{id: 3,titl
·
有时候后台返回的数据需要自己处理,例:如下数据,
let data = [{
id: 1,
title: '飞蛾扑火',
pid: 0
},
{
id: 2,
title: '你就像一只扑火的飞蛾',
pid: 1
},
{
id: 3,
title: '执着于不属于你的花火',
pid: 2
}, {
id: 4,
title: '你凝望我眼中的银河',
pid: 0
},
{
id: 5,
title: '却钟情他口中的炙热',
pid: 4
}]
当pid = 0的数据是处于父级,不等于0 是子级,比如:id = 1,pid = 1,这样哪么pid=1的就是id=1的子级元素,如下:
{
id: 1,
title: '飞蛾扑火',
pid: 0,
chilren:[
{
id: 2,
title: '你就像一只扑火的飞蛾',
pid: 1
}
]
}
处理上面的data的数据
function formDataTree(data) {
//先查找出父级和子级
let parents = data.filter(p=>p.pid == 0),
chilren = data.filter(c=>c.pid != 0);
dataToTree(parents,chilren);
return parents;
}
//对父级和子级元素进行处理
function dataToTree(parents,chilren){
// console.log(parents);
// console.log(chilren);
parents.map(p=>{
chilren.map((c,i)=>{
if(p.id === c.pid){
//当子级下面还有子级的时候,此时的子级就最为父级,需要用到递归
//拷贝一份chilren数据
let _chilren = JSON.parse(JSON.stringify(chilren));
_chilren.splice(i,1);
//递归
dataToTree([c],_chilren);
//父级是否存在chilren
if(p.chilren){
p.chilren.push(c);
}else{
p.chilren = [c];
}
}
})
})
}
let newdata = formDataTree(data);
console.log(newdata);
打印如下:

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)