js生成树结构

这段内容展示了如何将具有父ID的数组转换为树形结构。通过filter函数筛选出根节点,然后递归地将子节点附加到对应的父节点上,最终形成一个完整的树结构数据。这个过程对于组织层级数据非常有用,例如在前端开发中构建导航菜单或者组织树状视图。
摘要由CSDN通过智能技术生成
let arr = [
      {
        id: 1,
        name: '一级1',
        pid: 0,
      },
      {
        id: 2,
        name: '一级2',
        pid: 0,
      },
      {
        id: 3,
        name: '一级3',
        pid: 0,
      },
      {
        id: 4,
        name: '二级11',
        pid: 1,
      },
      {
        id: 5,
        name: '二级12',
        pid: 1,
      },
      {
        id: 6,
        name: '二级21',
        pid: 2,
      },
      {
        id: 7,
        name: '二级22',
        pid: 2,
      },
      {
        id: 8,
        name: '三级11',
        pid: 4,
      },
    ]
    function getTree(data) {
      let parents = data.filter((v) => v.pid == 0)
      children = data.filter((v) => v.pid !== 0)
      dataToTree(parents, children)
      function dataToTree(parents, children) {
        parents.map((v) => {
          children.map((c, i) => {
            if (c.pid === v.id) {
              let _c = JSON.parse(JSON.stringify(children))
              _c.splice(i, 1)
              dataToTree([c], _c)

              if (v.children) {
                v.children.push(c)
              } else {
                v.children = [c]
              }
            }
          })
        })
      }
      return parents
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曹筱君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值