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": []
  }
]

JS将扁平化的数据处理成Tree结构的更多相关文章

  1. JavaScript数组常用方法解析和深层次js数组扁平化

    前言 数组作为在开发中常用的集合,除了for循环遍历以外,还有很多内置对象的方法,包括map,以及数组筛选元素filter等. 注:文章结尾处附深层次数组扁平化方法操作. 作为引用数据类型的一种,在处 ...

  2. js数组扁平化

    看到一个有趣的题目: var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]; 一个多维 ...

  3. JS: 数组扁平化

    数组扁平化 什么是数组扁平化? 数组扁平化就是将一个多层嵌套的数组 (Arrary) 转化为只有一层. // 多层嵌套 [1, 2, [3, 4]] // 一层 [1, 2, 3, 4] 递归实现 思 ...

  4. 使用js将后台返回的数据转换成树形结构

    将类似如下数据转换成树形的数据: [ { id: 1, name: '1', }, { id: 2, name: '1-1', parentId: 1 }, { id: 3, name: '1-1-1 ...

  5. JS数组扁平化(flat)

    需求:多维数组=>一维数组 let ary = [1, [2, [3, [4, 5]]], 6]; let str = JSON.stringify(ary); 第0种处理:直接的调用 arr_ ...

  6. 【技术宅6】把一个无限级分类循环成tree结构

    function list_to_tree($list,$root=0,$pk='cid',$pid = 'pid',$child = '_child'){ if(is_array($list)) { ...

  7. js中数组扁平化处理

  8. [转]easyui tree 模仿ztree 使用扁平化加载json

    原文地址:http://my.oschina.net/acitiviti/blog/349377 参考文章:http://www.jeasyuicn.com/demo/treeloadfilter.h ...

  9. EasyUI tree 异步树与采用扁平化实现的同步树

    所谓好记性不如烂笔头,为了以防忘记,才写下这篇博客,废话不多.. 异步树: tips:   可以采用easyui里的原始数据格式,也可以采用扁平化的数据格式. 使用场景: 当菜单模块数量庞大或者无限极 ...

随机推荐

  1. 匈牙利算法(Kuhn-Munkres)算法

    这个算法有点难度,一般比较标准的描述网页上也有相关的描述,我在这里就简单的用十分通俗的语言给大家入个门 主要可以结合https://blog.csdn.net/zsfcg/article/detail ...

  2. Django redis 应用

    一.自定义连接池 与python中使用连接池一样(使用单例对象) 注意:每个视图函数都要有 conn = redis.Redis(connection_pool=POOL) 二.使用第三方模块(dja ...

  3. 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发

    <ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...

  4. 关于SOA架构设计的案例分析

    关于SOA架构设计的案例分析 面向服务的体系结构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.它可以根据需求通过网络对松散耦合的粗粒度应 ...

  5. java小心机(2)| 重载和构造器的小细节

    每天进步一点点,距离大腿又近一步! 阅读本文大概需要10分钟 java小心机,为你诉说java鲜为人知的一面 涉及基本数据类型的重载 基本类型能从一个"较小"的类型自动提升到&qu ...

  6. RocketMQ 实战之快速入门

    原文地址:https://www.jianshu.com/p/824066d70da8 最近 RocketMQ 刚刚上生产环境,闲暇之时在这里做一些分享,主要目的是让初学者能快速上手RocketMQ. ...

  7. (初学JS)JS基础——ATM机终端程序编写<1.0>

    初步学习了JS基础,为了更好地将所学知识熟练运用,我进行了银行ATM存取款机的模拟程序编写,主要通过VScode终端实现系列操作. 我的ATM程序包括6个主要功能:1.查询余额 2.存钱 3. 取钱 ...

  8. selenium + PhantomJS使用时 PhantomJS报错解决

    selenium + PhantomJS使用时 PhantomJS报错解决 在做动态网页爬虫时用到了selenium + PhantomJS,安装好之后运行时报错: UserWarning: Sele ...

  9. Linux中inode详解

    转自:https://www.cnblogs.com/itech/archive/2012/05/15/2502284.html 一.inode是什么? 理解inode,要从文件储存说起. 文件储存在 ...

  10. geojson转esriJson

    因为一些特殊需求,需要将geojson转为shp数据,网上有一些转换网站,但是存在一些问题,例如中文乱码.文件大小限制等等,折腾了一下,还是觉得用arcgis转比较好,因此先将geojson转为esr ...