JavaScript数组转为树形结构

2020-04-09  本文已影响0人  六寸光阴丶

写在前面

如果本文对您有所帮助,就请点个关注吧!

手写数组转树形

源代码

function toTree(data) {
  let result = []
  if (!Array.isArray(data)) {
    return result
  }
  data.forEach(item => {
    delete item.children
  })
  let map = {}
  data.forEach(item => {
    map[item.id] = item
  })
  data.forEach(item => {
    let parent = map[item.pid]
    if (parent) {
      (parent.children || (parent.children = [])).push(item)
    } else {
      result.push(item)
    }
  })
  return result
}

测试

var source = [{
  id: 1,
  pid: 0,
  name: 'body'
}, {
  id: 2,
  pid: 1,
  name: 'title'
}, {
  id: 3,
  pid: 1,
  name: 'div'
}, {
  id: 4,
  pid: 3,
  name: 'span'
}, {
  id: 5,
  pid: 3,
  name: 'icon'
}, {
  id: 6,
  pid: 4,
  name: 'subspan'
}]

console.log(toTree(source))
上一篇 下一篇

猜你喜欢

热点阅读