zoukankan      html  css  js  c++  java
  • 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
    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])
      }
     
     

     

  • 相关阅读:
    BZOJ 1562 [NOI2009] 变换序列
    BZOJ 2535:NOI 2010 航空管制
    C++ 莫队算法(转)
    SDOI2013直径(树的直径)
    c++分块算法(暴力数据结构)
    洛谷题解 P2865 【[USACO06NOV]路障Roadblocks】
    c++最短路经典问题
    LOJ#10065. 「一本通 3.1 例 2」北极通讯网络
    最小生成树(kruscal算法)
    飞屋环游记
  • 原文地址:https://www.cnblogs.com/gavin007/p/8340200.html
Copyright © 2011-2022 走看看