最简便的list数据转树形结构方法(递归详细)

List 转树形结构 不使用递归方式1-获取每一个分层。使用递归方式,获取根节点。 阅读详情

后台返回数据是一行一行的,但是前端展示要树形结构数据,所以需要我们自己处理函数了,小编在此献丑了,小写一个简便函数供大家参考,希望反馈一下。

返回数据格式 :

var list = [

{ name: '根目录1' , id: 1, parentId: 0 }, 

{ name: '根目录2' , id: 2, parentId: 0 }, 

{ name: '目录1-1' , id: 3, parentId: 1 },

{name: '目录1-2' , id: 4, parentId: 1 },

{name: '目录2-1' , id: 5, parentId: 2 },

{name: '目录1-2-1' , id: 6, parentId: 4 }

];

看到数据格式,大家很明白,name用来显示的,id是唯一值,parentId是父目录的id,而且第一级的父id为0;所以根据这个我们就可以组装了,函数如下

 

function arrayToTree(arr, parentId) {

     //  arr 是返回的数据  parendId 父id

    let temp = [];

    let treeArr = arr;

    treeArr.forEach((item, index) => {

        if (item.parentId == parentId) {

            if (arrayToTree(treeArr, treeArr[index].id).length > 0) {

                 // 递归调用此函数

              treeArr[index].children = arrayToTree(treeArr, treeArr[index].id);

            }

            temp.push(treeArr[index]);

        }

   });

   return temp;

}

console.log(arrayToTree(list , 0));   // 第一级的父目录id是0;写死调用

// [{ name: ‘根目录1’ , id: 1: parentId: 0 , children:[{ name: ‘目录1-1’ , id: 3: parentId: 1 },{ name: ‘目录1-2’ , id: 4: parentId: 1              , children:[{name: ‘目录1-2-1’ , id: 6, parentId: 4 }]}]}, 

    { name: ‘根目录2’ , id: 2: parentId: 0 , children:[{ name: ‘目录2-1’ , id: 5: parentId: 2 } ]}

]

Java中平铺列表(List)与树形(Tree)结构的互转 至此,递归和非递归分别实现listtotree和treetolist已完成,实现比较仓促,有很多细节处未处理好,希望看到的小伙伴及时指出,不胜感激。另外,机智的你,有其它更好的方法,实现转换吗?欢迎留言分享,码海无涯,共同进步。httpshttps。... 阅读详情

相关推荐

利用List实现多层级树形结构的简易教程

在计算机科学中,树是一种广泛使用的非线性数据结构,用于表示具有层级关系的数据。树由节点(Node)组成,每个节点包含数据部分和指向其子节点的引用。树的根节点(Root)是树的最顶层节点,没有父节点。树的叶子节点(Leaf)则是没有子节点的节点,位于树的底层。树形结构是抽象的,它模拟了真实世界中的家谱、组织架构、文件系统的目录结构等。在树中,节点间的关系不是一对一,而是一对多的层级关系,每个节点可以有零个或多个子节点,但最多只有一个父节点(除了根节点)。递归是一种编程技术,它允许函数调用自身。

weixin_42576804的博客 942

JS中list转为tree,tree转为list的实现

递归的思想就是找儿子节点:遍历arr中的元素,看看元素的pid是否和id相等,如果相等就是它的孩子,添加到children中,第一个参数是id,第二个参数是存放孩子的数组,第三个参数是所有的元素数组。首先我们捋一下非递归方法的思路:遍历arr中每一个元素,找这个元素的父亲(v.id === pid)。对于tree和list之间的两种状态转换,我们先捋清思路再练习,多敲敲熟悉代码。也是分为了递归和非递归两种方法,很简单,就直接给大家看代码吧!一、list转tree的方法。一、list转tree的方法。

qq_53740827的博客 2174

js 实现 list转换成tree的方法示例(数组到树)

目标: JS 将有父子关系的平行数组转换成树形数据 方法:双重遍历,一次遍历parentId,一次遍历id == parendId; 该方法应该能很容易被想到,实现起来也一步一步可以摸索出来; const oldData = [ {id:1,name:'boss',parentId:0}, {id:2,name:'lily',parentId:1}, {id:3,name:'jack',parentId:1}, {id:4,name:'john',parentId:2}, {id:5,name:'boss2',parentId:0}, ] function listT

List<T> 转 树形结构

百度百科递归说明: 程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回...

Hunter的博客 4405

CTF命令执行绕过实战:从空格过滤到无回显外带的7种核心姿势

命令执行漏洞是Web安全中的常见高危漏洞,其核心原理在于应用程序未对用户输入进行充分过滤,导致攻击者能够注入并执行系统命令。在真实环境中,安全防护措施(如WAF、输入过滤函数)普遍存在,因此漏洞利用的关键技术在于“绕过”这些过滤机制。理解过滤器的运作逻辑(如黑名单、白名单、转义、长度限制)是成功绕过的前提。通过系统学习**空格绕过**、**命令黑名单绕过**、**编码混淆**等基础技巧,并结合**无回显外带**、**反弹Shell**等高级利用链,安全研究人员能够有效应对复杂防护场景。本文以CTFshow

weixin_29315091的博客 368

神经网络学习笔记-波尔兹曼(Boltzmann)机

Boltzmann机是一种反馈随机神经网络 两种输出状态,单极性0或1。输出状态的取值根据概率统计法则决定,这种概率统计法则类似Boltzmann分布,部分反馈 它在神经元状态变化中引入了统计概率,网络的平衡状态服从Boltzmann分布,网络运行机制基于模拟退火算法。 离散Hopfield神经网络+模拟退火+隐单元=Boltzman机 DHNN全反馈,转移函数:符号函数 BM机网络拓扑...

求易学堂的博客 2612

递归创建树形结构数据

递归创建树形结构数据 创建一个树形结构对象,然后用递归算法,返回前端一个树形的list集合 1、先创建实体对象,树形结构必须要有关联的pid字段 @Data @AllArgsConstructor @NoArgsConstructor public class Node implements IBaseTree{ /** * 主键id */ private Integer id; /** * 名称 */ private String

weiyifang11的博客 2118

Ubuntu22.04系统安装及配置

下载Ubuntu22.04系统镜像(下载地址:链接:https://caiyun.139.com/m/i?提取码:fLRJ),结合rufus和系统镜像制作USB启动盘,在物理机服务器上通过USB启动盘进行安装;或通过Esxi虚拟化平台创建虚拟机,然后在虚拟机中使用系统镜像进行安装。

cheagoun的博客 8万+

Java将List转树形结构

List转树形结构

luoyueliushuang的博客 6694

保姆级教程:手把手调试PX4Ctrl的油门映射与姿态控制(附ROS节点配置)

本文提供PX4Ctrl的深度调参指南,涵盖油门映射、姿态控制及ROS节点配置等关键环节。通过详细解析PX4控制器的核心逻辑、递归最小二乘法(RLS)参数估计及状态机设计,帮助开发者优化无人机飞控性能。附实战案例与安全调试建议,适合PX4开发者进阶学习。

weixin_30363981的博客 382

mysql根据父节点递归查询所有子节点,List转树形结构工具类

经常有业务需要递归查询MySQL树形结构某一节点的所有子节点,每次从网上扒拉找都得找半天,索性就自己总结一些自己遇到的比较好用的一些方法。

Java开发,人工智能,边缘计算,致力于掌握前沿技术 5523

从零到一:3D Slicer与MONAI在医学影像中的AI革命

本文探讨了3D Slicer与MONAI在医学影像分析中的革命性应用,展示了如何通过开源工具实现高效的三维影像处理和AI增强分析。结合临床案例,详细介绍了从数据准备到AI分析的全流程,显著提升诊断效率和精度,推动医学影像技术迈向新纪元。

tcp8optimizer的博客 339

【递归】树形结构、list转map

在自己的逻辑中调用递归方法,即可。将得到的list的树形结构转map。

m0_70083523的博客 824

Altium Designer操作技巧(1)——原理图中如何批量替换元器件?

《AltiumDesigner批量替换元器件技巧分享》摘要:本文介绍了两种在AltiumDesigner中批量替换元器件的实用方法。方法一通过“查找相似对象”功能,可精准匹配并批量修改器件参数;方法二利用ActiveBOM功能,在BOM表中直观操作器件替换,推荐使用第二种方法可使BOM管理更高效。这些技巧能有效减少物料种类、降低贴装成本,特别适用于电阻电容等常用器件的批量替换。关注公众号获取更多电子设计技巧。

u012526819的博客 2576

基于资源预测的Agent弹性伸缩:在成本与响应延迟间寻找最佳平衡点

手动伸缩:完全由运维人员人工调整副本数或服务器数量,效率极低,现在基本只用于极小规模的业务。反应式伸缩:基于当前实时监控指标触发伸缩规则,比如CPU利用率超过70%就加2个副本,是目前应用最广泛的方案,典型代表是K8s HPA、KEDA。预测式伸缩:基于历史时序数据预测未来的负载,提前进行伸缩,解决反应式伸缩的滞后性问题,典型代表是AWS Predictive Scaling、阿里云预测式HPA。智能Agent伸缩。

SuperAGI2025 132

vue list 递归显示树形结构

vue list 递归显示树形结构 tree 方法递归返回parentId下的所有子 tree (parentId) { const tree = [] this.navigation.forEach(item => { if (item.parent === parentId) { tree.push({ ...item,...

qq_36567996的博客 1199

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java List结构转Tree树形结构_非递归_简单优化版

背景 之前写过一个文章Java递归将List数据转换为Tree结构数据_填坑指南用的是递归的方法,后来在今日头条上也发布了,评论区以为大佬给了我一些指点(如下图),我看了之后恍然大悟,相对于使用递归,此方法只需写一个方法,方法中两个循环,而使用递归的话,需要写三个方法,还要用递归,使用递归不仅内存开销大,性能也不行。 大佬提供的代码 具体实现 /** * 对象List转为Tree树形结构 * @param entityList 传进来的泛型List * ..

qq_34466253的博客 3070

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

JAVA实现树结构List递归遍历

前言 由于之前在写树结构遍历的时候都是 copy 的别人的代码,想着把功能完成就行,并没有真正理解如何实现的遍历的,又怎么递归。前几天尝试着自己写一个遍历树结构 List,其实很简单,所以能自己动手,决不要 copy。先记录一个查询,增、删、改后续补上。 正文 实现思路 1. 先从数据库根据相应条件获取出树结构 List 2. 遍历获取到的数据将根节点取出 3. 遍历刚取出的列表,调用递归方法将子...

SuperRich 的博客 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

将List数据转成树的两种方式(递归、循环)

在做用户菜单权限的时候(因为多张表关联外键,hibernate返回回去会出现无限循环),所以把他转换成和数据库无关的VO类即可 一 、VO类如下 ** * * * 封装菜单的树形结构 * @author 六松岛福小林 * **/ public class MenuTree implements java.io.Serializable { /** * 树形节点id ...

ourLang 4万+

Java中将list转为树形结构

在系统开发过程中,可能会碰到一些需求,需要构建树形结构,数据库一般就使用父id来表示,比如构建菜单、构建地区级联、构建部门层级结构等等。虽然可以通过数据库SQL查询,但我们一般都是通过SQL一次性查询出所有数据,在程序中处理成树形结构。本文讲述如何将一个List<T> 处理成想要的树形结构。 1、自己测试过没问题的: /** * 对象List转为Tree树形结构 * * @param entityList 传进来的泛型List * @par

zlfjavahome的专栏 1万+

如何设计树形结构

我以前接触过一个前端插件,叫zTree。这个插件的作用是把接口返回的数据以树形结构的形式展示出来:--1.准备一个Div,设置id-->// 2.需要的数据name:"父节点1 - 展开",open:true,name:"父节点11 - 折叠",{ name:"叶子节点111"},{ name:"叶子节点112"},{ name:"叶子节点113"},{ name:"叶子节点114"}},name:"父节点12 - 折叠",{ name:"叶子节点121"},

smart_an的专栏 2289

List转Tree的两种方法(无递归 )

介绍了List转Tree的两种方法,不包含递归

菜鸟程序员的成长之路 1万+

Java对List结构数据递归实现树形结构数据

TreeBean t14 = new TreeBean(14, "岳麓区", 4, new ArrayList<>());TreeBean t3 = new TreeBean(3, "广州市", 1, new ArrayList<>());TreeBean t4 = new TreeBean(4, "长沙市", 2, new ArrayList<>());TreeBean t8 = new TreeBean(8, "深圳市", 1, new ArrayList<>());

whw___1990的博客 783

C# .NET List转树形结构通用方法

C# .NET List转树形结构通用方法,递归方式转树形

风中使者的博客 1919

Java的 list 转 树形结构

public class AreaVo { private String areaCode; private String areaName; private String upAreaCode; private List<AreaVo> childArea; //添加子节点的方法 public void addChild(AreaVo areaVo){ if (childArea==null){ child

m0_46636892的博客 2695
上一篇: js 某年的某月多少天(最优)
下一篇: js reduce实现二维数组纵向和
拼搏的小叔
博客等级 码龄10年 56粉丝 61原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值