id pid數據轉爲樹形數據結構

樹形數據在數據庫中通常是使用idpid來記錄:javascript

{
     id: 1,
     pid: 0,
     name: '公司'
 }
複製代碼

這種數據怎麼轉成前端所需的樹形的數據結構呢?前端

代碼以下:java

var flatLs = [
  {id: 1, pid: 0},
  {id: 2, pid: 0},
  {id: 3, pid: 0},
  {id: 4, pid: 1},
  {id: 5, pid: 1},
  {id: 6, pid: 2},
  {id: 7, pid: 3},
  {id: 8, pid: 3},
  {id: 9, pid: 4},
  {id: 10, pid: 1}
]
var flat2tree = flatLs => {
  flatLs.forEach(item => {
    if (item.pid === 0) {
      tree.push(item)
    } else {
      var index = flatLs.findIndex(item1 => item1.id === item.pid)
      if (index !== -1) {
        flatLs[index].children = flatLs[index].children || []
        flatLs[index].children.push(item)
      }
    }
  })
  return flatLs.filter(item => item.pid === 0)
}

flat2tree(flatLs)
複製代碼

這裏主要利用了對象是經過引用傳值的特色來處理的。所以遍歷整個數組,直接修改傳入的參數,最後取出全部的頂層節點的數據便可。數據中假定全部的頂級節點的pid都是0數據庫

相關文章
相關標籤/搜索