一维数组转换为树状结构算法(时间复杂度仅为O(n))

//示例数组
    let list = [
    { id: 1, perId: 0, leve: 1 },
    { id: 2, perId: 0, leve: 1 },
    { id: 3, perId: 0, leve: 1 },
    { id: 11, perId: 1, leve: 2 },
    { id: 12, perId: 1, leve: 2 },
    { id: 13, perId: 1, leve: 2 },
    { id: 21, perId: 11, leve: 3 },
    { id: 31, perId: 21, leve: 4 },
    { id: 66, perId: 2, leve: 2 },
    { id: 104, perId: 66, leve: 3 },
    { id: 203, perId: 104, leve: 4 },
    { id: 499, perId: 203, leve: 5 }
]
    function tree(list) {
        let map = {};
        list.map(e=>map[e.id] = e);
        list.map(e=>{
            if(map[e.perId]){
                map[e.perId].child ? map[e.perId].child.push(e) : map[e.perId].child = [e]
            }
        })
        let newList = Object.keys(map).map(e=>map[e])
        return newList.filter(e=>e.perId === 0)
    }
console.log(tree(list));

 代码如上 只需要数据渲染逻辑如上,一维数组的每个数据都具有元素id和父id即可做到转换自如(代码中元素id为id,父id为perId)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值