数组数据 转化为 树状结构数据

codepen地址:

codepen地址

var aTree = [
    {"id": "1", "name": "动物", "pid": "0"},
    {"id": "2", "name": "鸟类", "pid": "5"},
    {"id": "3", "name": "无脊椎动物", "pid": "1"},
    {"id": "4", "name": "哺乳动物", "pid": "5"},
    {"id": "5", "name": "脊椎动物", "pid": "1"},
    {"id": "6", "name": "喜鹊", "pid": "2"},
    {"id": "7", "name": "蚯蚓", "pid": "3"}
];
function getParent(id, aTree) {
    var aParent = [];
        aTree.map((item,index)=>{
          if(item.pid==id){
            aParent.push(item);
          }
        })
        // for (var i in aTree) {
        //     if (aTree[i].pid == id) {
        //         aParent.push(aTree[i]);
        //     }
        // }
    return aParent;
}


var menu = '';
function makeTree(id, aTree){
    var topMenu = getParent(id, aTree);
    if (topMenu.length > 0) {
      topMenu.map((item,index)=>{
        menu += '<a href="#" onClick="alert('+item.id+')">' + item.name + '</a>';
            menu += '<ul>' // 为了区分层次,我们给每一个子级都包上一层ul
            makeTree(item.id, aTree);
            menu += '</ul>'
      })
        // for (var i in topMenu) {
        //     menu += '<a href="#">' + topMenu[i].name + '</a>';
        //     menu += '<ul>' // 为了区分层次,我们给每一个子级都包上一层ul
        //     makeTree(topMenu[i].id, aTree);
        //     menu += '</ul>'
        // }
    }
}
makeTree(0, aTree);
$('body').append(menu);

互相转换

//数组=>树形结构
let  aTree = [
    {"id": "1", "name": "动物", "pid": "0"},
    {"id": "2", "name": "鸟类", "pid": "5"},
    {"id": "3", "name": "无脊椎动物", "pid": "1"},
    {"id": "4", "name": "哺乳动物", "pid": "5"},
    {"id": "5", "name": "脊椎动物", "pid": "1"},
    {"id": "6", "name": "喜鹊", "pid": "2"},
    {"id": "7", "name": "蚯蚓", "pid": "3"}
];
function treeData(data){   
    let cloneData = JSON.parse(JSON.stringify(data))
    return cloneData.filter(parent=>{
        let branchArr = cloneData.filter(child => parent['id'] == child['pid']);
        branchArr.length>0 ? parent['children'] = branchArr : '';
        return parent['pid'] == 0 ;
    })
}

var newTree = treeData(aTree)
console.log(newTree);
$('.tree').append(JSON.stringify(newTree))
//树形结构=>数组
function flatten2 (data,pid) {
  return data.reduce((arr, {id, name, children = []}) =>
    arr.concat([{id, name,pid}], flatten2(children,id)), [])
} 
var newArr = flatten2(newTree,0);

组装树形结构数据

createTree(arr,pid){
    let tree = [];
    arr.forEach(e=> {
      if(pid == e.pid){
         e.child = this.createTree(arr,e.id);
         tree.push(e);
       }
    });
    return tree;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值