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])
  }
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM