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. Oracle 11g 安装过程及测试方法

    大家可以根据自己的操作系统是多少位(32位或64位)的,到官网下载相应的安装程序,如下图所示. 有一点需要注意,Oracle的安装程序分成2个文件,下载后将2个文件解压到同一目录即可.     下载完 ...

  2. 解决浮点运算精度不准确,BigDecimal 加减乘除

    package com.kflh.boxApi.utils.util; import java.math.BigDecimal; /** * @program: BoxApi * @descripti ...

  3. 自学前端开发,现在手握大厂offer,我的故事还在继续

    简要背景 我是一个非科班出身的程序员,而且是连续跨专业者,用一句话总结就是:16 届本科学完物流,保送研究生转交通,自学前端开发的休学创业者. 17 年休学创业,正式开始学习前端,离开创业公司后,我又 ...

  4. Centos 7 最小化部署zabbix

    前言 文章内容是作者本人编写,之前一直放在word文档中,突然有闲情转移到博客上来了,欢迎后续观看者有问题找我探讨~~~ 废话不多说,先说下原理吧 概述 工作原理 通过c/s模式采集数据,基于b/s模 ...

  5. Shell常用命令之ip

    前言 linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者.使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务.ifconfig是net-tools中已被废弃使用的 ...

  6. Shiro Web集成及拦截器机制(四)

    Shiro与 Web 集成 Shiro 提供了与 Web 集成的支持,其通过一个 ShiroFilter 入口来拦截需要安全控制的 URL,然后进行相应的控制,ShiroFilter 类似于如 Str ...

  7. JVM基础快速入门篇

    Java是一门可以跨平台的语言,但是Java本身是不可以实现跨平台的,需要JVM实现跨平台.javac编译好后的class文件,在Windows.Linux.Mac等系统上,只要该系统安装对应的Jav ...

  8. 实验7:交换机IOS升级

    交换机IOS升级首先需要有IOS文件,如果没有备份原文件的话,可以找个同一版本的IOS来替代. 第一种方法:X-Modem 以前我曾经尝试过一种方法,就是当Flash被删除后,启动无法进入系统,可以用 ...

  9. tmobst6an

    (单选题)Oracle数据库中,在SQL语句中连接字符串的方法是:(). A)CAT B)CONCAT C)JOIN D)UNION 解析:Oracle可以使用CONCAT关键字或"||&q ...

  10. Linux/UNIX编程:获取指定用户所有正在运行的进程ID和进程名

    先用系统函数 `getpwnam` 获得指定用户名的 UID,然后遍历 /proc/ 中所有 PID 目录,如果 /proc/PID/status 中的 UID 是输入用户名对应的 UID 则输出该 ...