let jsonData= [
  { id:1,  parentId:0, name:"一级菜单A" },
  { id:2, parentId:0, name:"一级菜单B"},
  { id:3, parentId:0, name:"一级菜单C"},
  { id:4, parentId:1, name:"二级菜单A-A"},
  { id:5, parentId:1, name:"二级菜单A-B"},
  { id:6, parentId:2, name:"二级菜单B-A"},
  { id:7, parentId:4, name:"三级菜单A-A-A"},
  { id:8, parentId:7, name:"四级菜单A-A-A-A"},
  { id:9, parentId:8, name:"五级菜单A-A-A-A-A"},
];
将上述扁平化数据转化成树形结构
function formatTree(obj){
  let copyedObj = JSON.parse(JSON.stringify(obj)) //深拷贝源数据
  return copyedObj.filter(parent=>{
    let findChildren = copyedObj.filter(child=>{
      return parent.id === child.parentId
    })
    findChildren.length>0 ? parent.children = findChildren : parent.children = []
    return parent.parentId == 0 //返回顶层,依据实际情况判断这里的返回值
  })
}
}
console.log(JSON.stringify(formatTree(jsonData),null,3))
[
  {
    "id": 1,
    "parentId": 0,
    "name": "一级菜单A",
    "children": [{
      "id": 4,
      "parentId": 1,
      "name": "二级菜单A-A",
      "children": [{
        "id": 7,
        "parentId": 4,
        "name": "三级菜单A-A-A",
        "children": [{
          "id": 8,
          "parentId": 7,
          "name": "四级菜单A-A-A-A",
          "children": [{
            "id": 9,
            "parentId": 8,
            "name": "五级菜单A-A-A-A-A",
            "children": []
          }]
        }]
      }]
    },
    {
      "id": 5,
      "parentId": 1,
      "name": "二级菜单A-B",
      "children": []
    }]
  },
  {
    "id": 2,
    "parentId": 0,
    "name": "一级菜单B",
    "children": [{
      "id": 6,
      "parentId": 2,
      "name": "二级菜单B-A",
      "children": []
    }]
  },
  {
    "id": 3,
    "parentId": 0,
    "name": "一级菜单C",
    "children": []
  }
]

最新文章

  1. IOS开发基础知识--碎片37
  2. MySQL显示中文
  3. UVa 1347 Tour
  4. 《OD大数据实战》Storm环境搭建
  5. 性能测试-Jmeter
  6. 微软职位内部推荐-Principal Dev Manager for Windows Phone Shell
  7. HTML+CSS基础学习笔记(6)
  8. 用UIKIT的模态对话框要注意的地方
  9. 监听RecyclerView滑动到末端
  10. 使用PHP进行SOCKET编程
  11. UNION ALL的用法
  12. 猜字母游戏(Java)
  13. GitHub 翻译之 'Hello-world' 翻译
  14. StanFord ML 笔记 第三部分
  15. [原创]K8正方系统密码解密工具
  16. KJHttp框架使用讲解
  17. 详解Oracle手动创建数据库几大步骤
  18. 拖拽demo--兼容--全局捕获
  19. linux 扩展权限
  20. mybatis逆向工程mbg

热门文章

  1. kafka(一)-为什么选择kafka
  2. 【Java并发基础】死锁
  3. NanoProfiler-Step1翻译
  4. 机器学习-MNIST数据集使用二分类
  5. golang判断目录项中是目录还是文件。
  6. Dynamics CRM CE 怎样从 UCI 改为 classic UI
  7. Dubbo入门到实战
  8. Quartz.Net和队列应用demo
  9. 移动端ui框架
  10. 画布 canvas 的相关内容