js处理一个list集合,根据属性对应关系将数据处理成树形结构

function myfun (arr , id){
   let array = []; 
   arr.forEach (function (item,index) {
   if((item.parentId || 0) == id){
   	   item["child"] = myfun(arrs,item["id"]);
   	   array.push(item);
     }
   })
   return array;
}
var arr =  [{
         defaultValue: 'N',
         id: 64800297066692610,
         name: '全部文件',
         seq: '1',
         type: 'KNOWLEDGE_FOLDER',
         val: '全部文件'
         },
     {
         defaultValue: 'N',
         id: 65033482023206910,
         name: '二级目录',
         parentId: 65032760841994240,
         parentName: '一级目录',
         parentType: 'KNOWLEDGE_FOLDER',
         parentVal: '一级目录',
         seq: '1',
         type: 'KNOWLEDGE_FOLDER',
         val: '二级目录'
     },
     {
         defaultValue: 'N',
         id: 65032760841994240,
         name: '一级目录',
         parentId: 64800297066692610,
         parentName: '全部文件',
         parentType: 'KNOWLEDGE_FOLDER',
         parentVal: '全部文件',
         seq: '1',
         type: 'KNOWLEDGE_FOLDER',
         val: '一级目录'
     },
     {
         defaultValue: 'N',
         id: 65033147279998980,
         name: '一级目录2',
         parentId: 64800297066692610,
         parentName: '全部文件',
         parentType: 'KNOWLEDGE_FOLDER',
         parentVal: '全部文件',
         seq: '2',
         type: 'KNOWLEDGE_FOLDER',
         val: '一级目录2'
     }
 ];

myfun(arr,0);

生成如下数据结构:

 

处理一个json数据,生成两级树形结构代码:

function changeJson(data){
    var r = [];
    var tmpMap ={};
    for (var i=0, l=data.length; i<l; i++) {
        // 以每条数据的id作为obj的key值,数据作为value值存入到一个临时对象里面
        tmpMap[data[i].id]= data[i];
    }
    for (i=0, l=data.length; i<l; i++) {
        var key=tmpMap[data[i].parentId];
        //循环每一条数据的pid,假如这个临时对象有这个key值,就代表这个key对应的数据有children,需要Push进去
        if (key) {
            if (!key.children){
                key.children = [];
                key.children.push(data[i]);
            }else{
                key.children.push(data[i]);
            }
        } else {
            //如果没有这个Key值,那就代表没有父级,直接放在最外层
            r.push(data[i]);
        }
    }
    return r;
};

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值