JS列表数据通过递归实现树形结构

这段代码展示了如何处理具有pid标识的树形数据结构,通过递归函数List寻找每个节点的子节点,并构建层级关系。在给定的数据中,根节点pid为null,通过遍历和递归,可以构建整个数据的层级结构,用于前端展示或者数据组织。
  const list = [
            { pid: null, id: 1, data: "1" },
            { pid: 1, id: 2, data: "2-1" },
            { pid: 1, id: 3, data: "2-2" },
            { pid: 2, id: 4, data: "3-1" },
            { pid: 3, id: 5, data: "3-2" },
            { pid: 4, id: 6, data: "4-1" },
        ];

        function List(list, root) {
            const arr = []
            //  先找到父节点
            list.forEach(item => {
                if (item.pid === root) {
                    // 将父节点添加到数组里
                    arr.push(item)
                    // 再次递归调用函数,传入数组跟当前每一项的id跟 pid 去寻找,找到相同的则就是子级
                    const children = List(list, item.id)
                    // console.log(children)
                    // 再次判断有没有存在没有子级情况,返回的是一个空数组
                    if (children.length > 0) {
                        // 有子级就给每一项的item添加个children属性
                        item.children = children
                    }
                }
            })

            return arr
        }

        const arr = List(list, null)
        console.log(arr)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值