树形数据整合

阅读更多
function getTreeS() {
      const time = new Date().getTime()
      treeS(treeData)
      const timeEnd = new Date().getTime()
      console.log((timeEnd - time) + 'ms')
      console.log(tree(treeData))
    }
                代码-

 

const treeData = [
      { id: 1, pid: 0, path: '/1'},
      { id: 2, pid: 1, path: '/2'},
      { id: 3, pid: 1, path: '/3'},
      { id: 4, pid: 1, path: '/4'},

      { id: 5, pid: 0, path: '/5'},
      { id: 6, pid: 5, path: '/6'},
      { id: 7, pid: 5, path: '/7'},
      { id: 8, pid: 6, path: '/8'},
      { id: 9, pid: 6, path: '/9'},
      { id: 10, pid: 7, path: '/10'},
      { id: 11, pid: 7, path: '/11'},
      { id: 12, pid: 8, path: '/12'},
      { id: 13, pid: 12, path: '/13'},
      { id: 14, pid: 13, path: '/14'},
      { id: 15, pid: 14, path: '/15'},

      { id: 16, pid: 0, path: '/16'},
      { id: 17, pid: 16, path: '/17'},
      { id: 18, pid: 16, path: '/18'},
      { id: 19, pid: 16, path: '/19'},
      { id: 20, pid: 16, path: '/20'}
    ]
                          代码二

 

function treeS(data, pid = 0){
      const newData = data.filter(function (item) {
        return item.pid === pid
      })
      data = data.filter(function (item) {
        return item.pid !== pid
      })
      for (let i = 0; i < newData.length; i++) {
        const rtData = treeS(data, newData[i].id)
        if (rtData && rtData.length > 0) {
          console.log(rtData)
          newData[i].children = []
          newData[i].children.push(rtData)
        }
      }
      return newData
    }
                       代码三

 

一。树形数据整合。

代码一::为时间测试代码。

代码二:为测试数据。

代码三: 为整合树形数据的方法。

性能:120条数据大约需要300ms-400ms左右。(如果有更好的方法,欢迎留言!)

 

二。主要使用技术。

      1。使用递归调用。

      2。使用 filter 方法用于过滤数组。

 

 

你可能感兴趣的:(树形数据整合)