先看结果

结果

[
{
"id": 1,
"title": "张三",
"parent_id": -1,
"childs": [
{
"id": 2,
"title": "张小二",
"parent_id": 1,
"childs": [
{
"id": 3,
"title": "张小三",
"parent_id": 2,
"childs": []
}
]
}
]
}
]
再看代码

方法

/**
* 生成tree
* @param parent_id 父id
*/
const initTree = (parent_id) => {
// jsonArray 变量数据
// 第一次以后:根据id去查询parent_id相同的(相同为子数据)
// 第一次:查找所有parent_id为-1的数据组成第一级
const child = jsonArray.filter(item => item.parent_id == parent_id)
// 第一次:循环parent_id为-1数组
return child.map(item => ({
...item,
// 当前存在id(id与parent_id应该是必须有的)调用initTree() 查找所有parent_id为本id的数据
// childs字段写入
childs: initTree(item.id)
}))
}
// 首先调用initTree方法查找所有parent_id为-1的(-1认为是第一级)
const tree = initTree(-1)
console.log(tree)

jsonArray 源数据

[
{
"id": 1, // id,与parent_id关联
"title": "张三",
"parent_id": -1,//父级id -1为第一级,与id做关联查询父子级关系
},
{
"id": 2,
"title": "张小二",
"parent_id": 1,
},
{
"id": 3,
"title": "张小三",
"parent_id": 2,
}
]

js递归生成树形结构的更多相关文章

  1. js递归生成树形下拉菜单

    需求:我需要把一个单表的数据转换成类似菜单那种如图所示:我呢需要把这个菜单树放入到下框里面去如图所示: 下面是实现思路:1.第一步1.1var afTypeJson=${afTypeJson}// 这 ...

  2. Delphi中根据分类数据生成树形结构的最优方法

    一. 引言:    TreeView控件适合于表示具有多层次关系的数据.它以简洁的界面,表现形式清晰.形象,操作简单而深受用户喜爱.而且用它可以实现ListView.ListBox所无法实现的很多功能 ...

  3. WPF下递归生成树形数据绑定到TreeView上

    最终效果图:(用于学习类的效果 图片丑了点,看官莫怪) 新建窗体 然后在前端适当位置插入如下代码: <TreeView x:Name="> <TreeView.ItemTe ...

  4. C#生成树形结构泛型类

    C#生成树形结构泛型类,使用方法: ToTree<ShowMessageUpdatesTableTreeViewModel>.ToDo(models) public class ToTre ...

  5. 在论坛中出现的比较难的sql问题:8(递归问题 树形结构分组)

    原文:在论坛中出现的比较难的sql问题:8(递归问题 树形结构分组) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有必 ...

  6. JAVA递归生成树形菜单

    递归生成一个如图的菜单,编写两个类数据模型Menu.和创建树形的MenuTree.通过以下过程实现: 1.首先从菜单数据中获取所有根节点. 2.为根节点建立次级子树并拼接上. 3.递归为子节点建立次级 ...

  7. 生成树形结构的json字符串代码(c#)供前端angular tree使用.

    框架是使用EF6.0.可以针对返回的值使用Newtonsoft.Json.dll(百度搜一下)来对返回的值序列化为json字符串,如果对以下值那就是使用JsonConvert.SerializeObj ...

  8. EasyUI使用tree方法生成树形结构加载两次的问题

    html代码中利用class声明了easyui-tree,导致easyUI解析class代码的时候先解析class声明中的easyui-tree这样组件就请求了一次url:然后又调用js初始化代码请求 ...

  9. PHP递归生成树形数组

    数据表结构 id   name  pid       ){ foreach($data as $row){ if($row['pid']==$p_id){ $tmp = $this->tree( ...

  10. EasyUI_tree根据数据库数据生成树形结构JSON格式

    @Entitypublic class PubComp { @Id private String aguid; // 菜单ID private String pguid; // 父菜单 private ...

随机推荐

  1. Sound Joy最新固件3.0.0.20版本 后悔了

    不建议更新3.0.0.20版本,更新之后音质直线下降,音质变得不耐听,低音浑浊,高音刺耳,三段不均衡.单纯听个响.更新此固件之后音质已经和100多的音响持平.对标JBL 万花筒6已经变得不可能.据我观 ...

  2. Ubuntu桌面顶端没有网络图标

    1 问题描述 刚装完新的linux系统后发现桌面顶部没有出现网络连接图标,网络无法进行连接配置. 2 解决方案 打开终端执行命令 nmcli network on或者sudo nmcli networ ...

  3. 在ArcGIS Pro中对Revit的bim数据进行地理配准(平移、旋转等)

    在ArcGIS Pro中,打开Revit的rvt格式数据,默认是没有坐标系,且位置会放置在原点位置(0,0),在实际使用过程中,需要对rvt数据进行地理配准,包括平移.旋转等操作将bim数据放置在正确 ...

  4. 人人都学会APP开发 提高就业竞争力 简单实用APP应用 安卓浏览器APP 企业内部通用APP制作 制造业通用APP

    安卓从2009年开始流程于手机.平板,已经是不争的非常强大生产力工具,更为社会创造非常高的价值, 现在已经是202X年,已经十几年的发展,安卓平台已经无所不在. 因此建议人人都学学APP制作,简易入门 ...

  5. 迁移学习(TSRP)《Improving Pseudo Labels With Intra-Class Similarity for Unsupervised Domain Adaptation》

    论文信息 论文标题:Improving Pseudo Labels With Intra-Class Similarity for Unsupervised Domain Adaptation论文作者 ...

  6. 强大的 apt-get 命令

    强大的 apt-get 命令(小结) 一.ubuntu下管理软件最方便的非 apt-get 工具莫属了,它的常见用法稍微整理一下供以后参考(详细见 man apt-get ): 1.更新源,升级软件和 ...

  7. 基于SqlSugar的开发框架循序渐进介绍(26)-- 实现本地上传、FTP上传、阿里云OSS上传三者合一处理

    在前面介绍的随笔<基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式[Options]处理常规上传和FTP文件上传>中介绍过在文件上传处理的过程中,整合了本 ...

  8. 迁移学习《Cluster-Guided Semi-Supervised Domain Adaptation for Imbalanced Medical Image Classification》

    论文信息 论文标题:Cluster-Guided Semi-Supervised Domain Adaptation for Imbalanced Medical Image Classificati ...

  9. Seal AppManager发布:基于平台工程理念的全新应用部署管理体验

    4月12日,数澈软件Seal(以下简称"Seal")宣布推出新一代应用统一部署管理平台 Seal AppManager,采用平台工程的理念,降低基础设施操作的复杂度为研发和运维团队 ...

  10. Java学习笔记04

    1. 循环进阶 1.1 无限循环 概念 ​ 循环一直停不下来,又叫死循环. for格式 for (;;) { 循环语句; } while格式 while (true) { 循环语句; } do...w ...