树形化数据

  function treeify(arr) {
    const res = []
    const children = new Map()
    const stack = []

    arr.forEach((item) => {
      if (!item.pid) {
        res.push(item)
        item.children = []
      } else {
        _children = children.get(item.pid) || []
        children.set(item.pid, _children.concat(item))
      }
    })

    res.forEach((item) => {
      //把所有孩子压入栈中
      children.get(item.id).map((child) => {
        stack.push(child)
        item.children.push(child)
      })

      //将所有孩子依次出栈,如果有孩子,则把它们的孩子压栈。重复上述操作,直至栈空。
      while (stack.length != 0) {
        const child = stack.pop()
        let _children = []
        if ((_children = children.get(child.id))) {
          _children.map((c) => {
            child.children = child.children || []
            child.children.push(c)
            stack.push()
          })
        }
      }
    })
    return res
  }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值