递归生成树形结构

212 阅读1分钟

数据:

const treeData = [
  {id: '1', parent: null, text: '活动1'},
  {id: '11', parent: '1', text: '活动1-1'},
  {id: '12', parent: '1', text: '活动1-2'},

  {id: '111', parent: '11', text: '活动1-1-1'},
  {id: '112', parent: '11', text: '活动1-1-2'},
  {id: '113', parent: '11', text: '活动1-1-3'},
  {id: '122', parent: '12', text: '活动1-2-1'},


  {id: '2', parent: null, text: '活动2'},
  {id: '21', parent: '2', text: '活动2-1'},
]

代码:

 function getTreeList(treeData, id, list){
   for(const item of treeData){
     if(item.parent === id){
       list.push(item)
     }
   }
  /* 
    list的值
      [
        {id: 1, parent: null, text: '活动1-1'}
        {id: 2, parent: null, text: '活动1-2'}
      ]

  */
    createChildren(treeData ,list)
    return list
}
function createChildren(treeData ,list){
  for(const i of list){
    i.children = []
    /* 
      [
        {id: 1, parent: null, text: '活动1-1', children: []}
        {id: 2, parent: null, text: '活动1-2', children: []}
      ]
   */
    getTreeList(treeData, i.id, i.children)
    if(i.children.length === 0){
      delete i.children
    }
  }
}
const res = getTreeList(treeData, null, [])