js 一维数组,转成嵌套数组

// 情况一: 

// 情况一:
// 数据源var egs = [
            {name_1: 'name_1...'},
            {name_2: 'name_4...'},
            {name_3: 'name_3...'},
            {name_0: 'name_0...'},
        ].reverse()
// 最终想要的数据形式
        // {name_1: 'name_1...',
        //     children: [
        //         {name_2: 'name_2...',
        //             children: [
        //                 {name_3: 'name_3...'},
        //             ]
        //         }
        //     ]
        // }

        var result = {}
        var key ='children'
        s(egs)

        function s(arrs) {
            arrs.forEach((o, i) => {
                console.log('---'+ i + ': ', result)
                if (!result[key]) {
                    result[key] = [o]
                } else {
                    o[key] = [result]
                    result = o
                }
             })
        }

        console.log(result)

// 情况二:

// pId 对应父级 id 

// 情况二:// pId 对应父级 id

let arr = [
    { pId: '-1', id: '0', name: '父级1' },
    { pId: '0', id: '1', name: '父级1-1' },
    { pId: '0', id: '2', name: '父级1-2' },
    { pId: '2', id: '21', name: '子级21' },
  ]

  function buildTree (arr) {
    let temp = {}
    let tree = {}
    // 数组转 键值对
    arr.forEach(item => {
      temp[item.id] = item
    })


    let tempKeys = Object.keys(temp)
    tempKeys.forEach(key => {
      // 获取当前项
      let item = temp[key]
      // 当前项 pId
      let _itemPId = item.pId
      // 获取父级项
      let parentItemByPid = temp[_itemPId]
      if (parentItemByPid) {
        if (!parentItemByPid.children) {
          parentItemByPid.children = []
        }
        parentItemByPid.children.push(item)
      } else {
        tree[item.id] = item
      }
    })
    // 对象转数组并返回
    return Object.keys(tree).map(key => tree[key])
  }

 

原文链接: https://www.cnblogs.com/gavin007/p/8340200.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值