export function tranListToTreeData(list, rootValue) {
// list是最完整的数组
let arr = []; // 记录儿子
list.forEach((item) => {
// 记录是否有儿子
if (item.parentId === rootValue) {
// 继续找自己儿子
const child = tranListToTreeData(list, item.id);
if (child.length) {
item.child = child;
}
// 没有孩子的 直接 push 有孩子的给child 树型
arr.push(item); // 收集儿子
}
});
return arr;
}

定义方法的位置 utlis/index.js  工具层 ;

调用  rootValue 根据 parentID 的最上层父级 确定

tranListToTreeData(list, null)

ps: 使用递归的时候,就是自身调用自身 ,但是条件一定不能相同 ,否则造成死循环 ;

ps:数据类型:

[
{
"id": "1eae3bd8-6425-42c8-90f5-4b73c14fbb73",
"name": "y1",
"sort": 0,
"parentID": "fd215de1-3174-4bff-824a-b496eca31fb4",
"remarks": null,
"createdAt": "2024-05-28T17:01:24.573",
"updatedAt": "2024-05-29T08:57:06.339",
"deletedAt": null
},
{
"id": "251dfdbd-1e48-419f-9be1-a90e3aba6a57",
"name": "y2",
"sort": 1,
"parentID": "fd215de1-3174-4bff-824a-b496eca31fb4",
"remarks": null,
"createdAt": "2024-05-28T17:01:28.234",
"updatedAt": "2024-05-29T08:57:06.644",
"deletedAt": null
},
{
"id": "4e8a3572-18e1-4f00-98c7-cc306195a0b9",
"name": "y4",
"sort": 3,
"parentID": "fd215de1-3174-4bff-824a-b496eca31fb4",
"remarks": null,
"createdAt": "2024-05-28T17:01:35.356",
"updatedAt": "2024-05-29T08:57:06.647",
"deletedAt": null
},
{
"id": "885d0bdc-d03d-4b23-b02b-f3020c7e622f",
"name": "y3",
"sort": 2,
"parentID": "fd215de1-3174-4bff-824a-b496eca31fb4",
"remarks": null,
"createdAt": "2024-05-28T17:01:31.58",
"updatedAt": "2024-05-29T08:57:06.645",
"deletedAt": null
},
{
"id": "fd215de1-3174-4bff-824a-b496eca31fb4",
"name": "yy",
"sort": 1,
"parentID": null,
"remarks": null,
"createdAt": "2024-05-28T16:30:11.244",
"updatedAt": "2024-05-28T16:30:11.244",
"deletedAt": null,
"children": [
{
"id": "1eae3bd8-6425-42c8-90f5-4b73c14fbb73",
"name": "y1",
"sort": 0,
"parentID": "fd215de1-3174-4bff-824a-b496eca31fb4",
"remarks": null,
"createdAt": "2024-05-28T17:01:24.573",
"updatedAt": "2024-05-29T08:57:06.339",
"deletedAt": null
},
{
"id": "251dfdbd-1e48-419f-9be1-a90e3aba6a57",
"name": "y2",
"sort": 1,
"parentID": "fd215de1-3174-4bff-824a-b496eca31fb4",
"remarks": null,
"createdAt": "2024-05-28T17:01:28.234",
"updatedAt": "2024-05-29T08:57:06.644",
"deletedAt": null
},
{
"id": "885d0bdc-d03d-4b23-b02b-f3020c7e622f",
"name": "y3",
"sort": 2,
"parentID": "fd215de1-3174-4bff-824a-b496eca31fb4",
"remarks": null,
"createdAt": "2024-05-28T17:01:31.58",
"updatedAt": "2024-05-29T08:57:06.645",
"deletedAt": null
},
{
"id": "4e8a3572-18e1-4f00-98c7-cc306195a0b9",
"name": "y4",
"sort": 3,
"parentID": "fd215de1-3174-4bff-824a-b496eca31fb4",
"remarks": null,
"createdAt": "2024-05-28T17:01:35.356",
"updatedAt": "2024-05-29T08:57:06.647",
"deletedAt": null
}
]
}
]

2. 使用递归算法将扁平数组转换为树形对象:

const flatData = [
{ id: 1, name: 'Node 1', parentId: null },
{ id: 2, name: 'Node 2', parentId: 1 },
{ id: 3, name: 'Node 3', parentId: 2 },
{ id: 4, name: 'Node 4', parentId: 3 },
{ id: 5, name: 'Node 5', parentId: 3 }
]; function convertToTree(flatData, parentId = null) {
const children = flatData.filter(node => node.parentId === parentId);
if (!children.length) {
return null;
}
return children.map(node => ({
...node,
children: convertToTree(flatData, node.id)
}));
} const treeData = convertToTree(flatData);
console.log(treeData);

将数组数据转化成树形结构 tranListToTreeData的更多相关文章

  1. Vue组件模板形式实现对象数组数据循环为树形结构

    数据结构为数组中包含对象--树形结构,用Vue组件的写法实现以下的效果: 树形列表,缩进显示层级,第5级数据加底色,数据样式显色,点击展开折叠数据.本文为用Vue实现方式,另有一篇为用knockout ...

  2. C# 把带有父子关系的数据转化为------树形结构的数据 ,以及 找出父子级关系的数据中里面的根数据Id

    紧接上一篇,将List<Menu>的扁平结构数据, 转换成树形结构的数据 返回给前端   ,   废话不多说,开撸! --------------------- 步骤: 1. 建 Menu ...

  3. js把json数据转化成树形数据

    /*转化函数*/ function(data, attributes) { let resData = data; let tree = []; for(let i = 0; i < resDa ...

  4. xml格式的数据转化成数组

    将得到的xml格式的数据转化成数组 <?php //构造xml $url = "http://api.map.baidu.com/telematics/v3/weather?locat ...

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

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

  6. javascript将平行的拥有上下级关系的数据转换成树形结构

    转换函数 var Littlehow = {}; /** * littlehow 2019-05-15 * 平行数据树形转换器 * @type {{format: tree.format, sort: ...

  7. 记一则 Lambda内递归调用方法将集合对象转换成树形结构

    public dynamic GetDepartments(string labID) { List<int> usedIDs = new List<int>(); //缓存已 ...

  8. 将数据转化成字符串时:用字符串的链接 还是 StringBuilder

    /* 目的:将数据转化成字符串时:用字符串的链接 还是 StringBuilder呢? */ public class Test{ public static void main(String[] a ...

  9. c# List列表数据转换成树形结构

    把List列表结构 转换成树形结构 /// <summary> /// 构造树形Json /// </summary> public static class TreeJson ...

  10. 关于mysql中数据存储复合树形结构,查询时结果按树形结构输出

    1.主要思想:根据已有数据,规则性的造数据 select * FROM(select lId,strName,lId as lParentId,-1 as orderIdx from tbClassi ...

随机推荐

  1. 【Java】Reflection 反射机制 03调用

    调用属性,方法,构造器 属性调用 @Test public void fieldCall() throws NoSuchFieldException, IllegalAccessException, ...

  2. 【Tutorial C】08 函数 Function

    函数的定义 C源程序是由函数组成的. 最简单的程序有一个主函数 main(),但实用程序往往由多个函数组成, 由主函数调用其他函数,其他函数也可以互相调用. 函数是C源程序的基本模块,程序的许多功能是 ...

  3. 【转载】 你真的理解Python中MRO算法吗?

    来自:www.xymlife.com 作者: XYM 链接:http://www.xymlife.com/2016/05/22/python_mro/ (点击阅读原文前往) ------------- ...

  4. 【转载】 Alpha-beta剪枝

    原地址:https://www.jiqizhixin.com/graph/technologies/56dbb21e-c3f9-4e06-b16a-2e28f25b26c8 ============= ...

  5. 架构演化学习思考(4) --- IOC的学习认识

    架构演化学习思考(4) IOC的学习认识[1] IOC相关概念认识 什么是IOC? IOC全称为 Inversion Of Control ,即控制反转.它是一种控制思想,可以解释为类和类之间的依赖关 ...

  6. bmp位图文件信息结构体

    /************************************************* * * file name:BmpInfoStruct.c * author :momolyl@1 ...

  7. SMU 2024 spring 天梯赛4

    SMU 2024 spring 天梯赛4 7-1 心理阴影面积 - SMU 2024 spring 天梯赛4 (pintia.cn) 由 \(d = \frac{Ax+By+c}{\sqrt {A^2 ...

  8. TCP/IP协议竟然有这么多漏洞?

    据2020年上半年中国互联网网络安全监测数据分析报告显示,恶意程序控制服务器.拒绝服务攻击(DDoS)等网络攻击行为有增无减.时至今日,网络攻击已经成为影响网络信息安全.业务信息安全的主要因素之一. ...

  9. CVSS(Common Vulnerability Scoring System)打分规则解读

    CVSS(Common Vulnerability Scoring System)提供了一种根据漏洞的主要特征进行打分,反映其严重性的方法.CVSS 已成为被广泛使用的标准. 下面是CVSS 3.1版 ...

  10. Managing Difficulties

    1 #include<bits/stdc++.h> 2 using namespace std; 3 #define FOR(i,n,m) for(int i=n;i<=m;i++) ...