js 数组转tree结构

数组数据

var list = [
  {id:1,pid:0,name:'一级'},
  {id:2,pid:1,name:'一级1'},
  {id:3,pid:1,name:'一级2'},
  {id:4,pid:2,name:'一级1-1'}
]

核心代码:

// 数组转treefunction composeTree(list = []) {
  const data = JSON.parse(JSON.stringify(list)) // 浅拷贝不改变源数据
  const result = []
  if (!Array.isArray(data)) {
    return result
  }
  data.forEach(item => {
    delete item.children
  })
  const map = {}
  data.forEach(item => {
    map[item.id] = item
  })
  data.forEach(item => {
    const parent = map[item.pid]
    if (parent) {
      (parent.children || (parent.children = [])).push(item)
    } else {
      result.push(item)
    }
  })
  return result
}

 调用方法:

let tree = composeTree(list)
console.log(tree) // [{"id":1,"pid":0,"name":"一级","children":[{"id":2,"pid":1,"name":"一级1","children":[{"id":4,"pid":2,"name":"一级1-1"}]},{"id":3,"pid":1,"name":"一级2"}]}]

 

posted on 2022-03-15 22:56  静以修身俭以养德  阅读(539)  评论(0编辑  收藏  举报

导航