有时候后台返回的数据需要自己处理,例:如下数据,

  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);

打印如下:

Logo

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

更多推荐