[js]遞歸實現 數組轉樹形


let arr = [
  {pid: -1, id: 1, name: 'm1'},
  {pid: 1, id: 2, name: 'm2'},
  {pid: 2, id: 3, name: 'm3'},
  {pid: 3, id: 4, name: 'm4'},
]

數組轉樹方式1

const listToTree = (list, tree, parentId) => {
  list.forEach(item => {
    // 判斷是否為父級菜單
    if (item.parentId === parentId) {
      const child = {
        ...item,
        key: item.key || item.name,
        children: []
      }
      // 迭代 list, 找到當前菜單相符合的所有子菜單
      listToTree(list, child.children, item.id)
      // 刪掉不存在 children 值的屬性
      if (child.children.length <= 0) {
        delete child.children
      }
      // 加入到樹中
      tree.push(child)
    }
  })
}

數組轉樹方式2

function getMenuList(authList) {
  let menu = [];
  let map = {}
  authList.forEach(m => {
    m.children = [];
    map[m.id] = m; // {1:菜單,2:菜單}
    if (m.pid === -1) {
      menu.push(m); // 如果是根 就直接push到menu中
    } else {
      map[m.pid] && map[m.pid].children.push(m);
    }
  });
  return menu
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM