继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

js递归实现数组转树结构(多级菜单应用)-优化

甜酒0917
关注TA
已关注
手记 13
粉丝 2
获赞 23

自己写的,优化了传入的数组元素(是否有pid属性)和(pid属性值是否存在)的 处理

var aaa= [{name:'wwb',id:111},{name:'aaa',id:0,pid:"mei"},{name:'a',id:1,pid:"mei"},{name:'b',id:2,pid:1},{name:'c',id:3,pid:1},{name:'d',id:4,pid:2},{name:'e',id:5,pid:2}];

function test(ary,data){

    var data=data?data:(function(ary){
      var tempAry=[];
      var idList=[];
      ary.forEach(function(item){idList.push(item.id)});
     function deb(id,idList){
         var flag=true;
        for(var ida in idList){
            if(id==idList[ida]){
                flag=false;
            }       
        }
         return flag;
     }

      for(var i=0,len=ary.length;i<len;i++){
        if(ary[i].pid==undefined||(ary[i].pid!=undefined&&deb(ary[i].pid,idList))){
          var obj={name:ary[i].name,id:ary[i].id};
          tempAry.push(obj);
        }
       }
        return tempAry; 
    }(ary));

    var temp=0;
   if(data.constructor==Array){
     for(var i=0,len=data.length;i<len;i++){
        for(var j=0,lenA=ary.length;j<lenA;j++){
           if(ary[j].pid==data[i].id){
           var obj={name:ary[j].name,id:ary[j].id};
           data[i].child=data[i].child||[];
           data[i].child.push(obj);
           temp++;
       }
     }
    }
   }

   if(temp>0){
     if(data.constructor==Array){
      for(var n=0,lenB=data.length;n<lenB;n++){
        data[n].child=test(ary,data[n].child?data[n].child:[]);
        if(data[n].child.length==0){
            delete data[n].child;
        }
          delete data[n].id;
      } 
    }
   }else{
       for(var n=0,lenB=data.length;n<lenB;n++){
          delete data[n].id;
       } 

   }
    return data;

}
var a=test(aaa);
    console.log(a)
打开App,阅读手记
4人推荐
发表评论
随时随地看视频慕课网APP

热门评论

https://img3.mukewang.com/5ad164ac0001d4cb05120512.jpg

// by maowenchao

function treeify(data) {
    var disposable = {},
    top, item;

    for (index in data) {
        item = data[index];

        if (!(item.id in disposable)) {
            disposable[item.id] = [];
        }

        if (!(item.parentId in disposable)) {
            disposable[item.parentId] = [];
        }

        item.children = disposable[item.id];

        if (item.parentId) {
            disposable[item.parentId].push(item);
        } else {
            top = item;
        }
    }

    return top;
}

可以试试这样。

查看全部评论