javaScript把平面列表数据转化成tree结构数据

71 阅读1分钟
let list = [
  {"Id":1,"parentId":null,"Sort":0,"Name":"菜单1"},
  {"Id":2,"parentId":1,"Sort":0,"Name":"菜单1-1"},
  {"Id":3,"parentId":1,"Sort":0,"Name":"菜单1-2"},
  {"Id":4,"parentId":2,"Sort":2,"Name":"菜单1-1-2"},
  {"Id":5,"parentId":2,"Sort":1,"Name":"菜单1-1-1"},
  {"Id":6,"parentId":null,"Sort":0,"Name":"菜单2"},
  {"Id":7,"parentId":6,"Sort":0,"Name":"菜单2-1"},
  {"Id":8,"parentId":6,"Sort":0,"Name":"菜单2-2"},
  {"Id":9,"parentId":8,"Sort":2,"Name":"菜单2-2-2"},
  {"Id":10,"parentId":8,"Sort":1,"Name":"菜单2-2-1"},
  {"Id":11,"parentId":10,"Sort":0,"Name":"菜单2-2-1-1"},
  {"Id":12,"parentId":10,"Sort":0,"Name":"菜单2-2-1-2"},
  {"Id":13,"parentId":null,"Sort":0,"Name":"菜单3"},
  {"Id":14,"parentId":13,"Sort":0,"Name":"菜单3-1"},
  {"Id":15,"parentId":13,"Sort":0,"Name":"菜单3-2"},
  {"Id":16,"parentId":15,"Sort":2,"Name":"菜单3-2-2"},
  {"Id":17,"parentId":15,"Sort":1,"Name":"菜单3-2-1"},
  {"Id":18,"parentId":17,"Sort":0,"Name":"菜单3-2-1-1"},
  {"Id":19,"parentId":17,"Sort":0,"Name":"菜单3-2-1-2"}
]

function tranListToTreeData(list, rootValue) {
   const arr = []
   list.forEach(item => {
      if (item.parentId === rootValue) {
        // 以 item.id 作为 父 id, 接着往下找
        const children = tranListToTreeData(list, item.Id)
        if (children.length > 0) {
           item.children = children
        }
        // 将item项, 追加到arr数组中
        arr.push(item)
      }
   })
   return arr
}
console.log(tranListToTreeData(list, null))