将数组数据转化成树形结构 tranListToTreeData
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的更多相关文章
- Vue组件模板形式实现对象数组数据循环为树形结构
数据结构为数组中包含对象--树形结构,用Vue组件的写法实现以下的效果: 树形列表,缩进显示层级,第5级数据加底色,数据样式显色,点击展开折叠数据.本文为用Vue实现方式,另有一篇为用knockout ...
- C# 把带有父子关系的数据转化为------树形结构的数据 ,以及 找出父子级关系的数据中里面的根数据Id
紧接上一篇,将List<Menu>的扁平结构数据, 转换成树形结构的数据 返回给前端 , 废话不多说,开撸! --------------------- 步骤: 1. 建 Menu ...
- js把json数据转化成树形数据
/*转化函数*/ function(data, attributes) { let resData = data; let tree = []; for(let i = 0; i < resDa ...
- xml格式的数据转化成数组
将得到的xml格式的数据转化成数组 <?php //构造xml $url = "http://api.map.baidu.com/telematics/v3/weather?locat ...
- 使用js将后台返回的数据转换成树形结构
将类似如下数据转换成树形的数据: [ { id: 1, name: '1', }, { id: 2, name: '1-1', parentId: 1 }, { id: 3, name: '1-1-1 ...
- javascript将平行的拥有上下级关系的数据转换成树形结构
转换函数 var Littlehow = {}; /** * littlehow 2019-05-15 * 平行数据树形转换器 * @type {{format: tree.format, sort: ...
- 记一则 Lambda内递归调用方法将集合对象转换成树形结构
public dynamic GetDepartments(string labID) { List<int> usedIDs = new List<int>(); //缓存已 ...
- 将数据转化成字符串时:用字符串的链接 还是 StringBuilder
/* 目的:将数据转化成字符串时:用字符串的链接 还是 StringBuilder呢? */ public class Test{ public static void main(String[] a ...
- c# List列表数据转换成树形结构
把List列表结构 转换成树形结构 /// <summary> /// 构造树形Json /// </summary> public static class TreeJson ...
- 关于mysql中数据存储复合树形结构,查询时结果按树形结构输出
1.主要思想:根据已有数据,规则性的造数据 select * FROM(select lId,strName,lId as lParentId,-1 as orderIdx from tbClassi ...
随机推荐
- 【Spring】05 注解开发
环境搭建 配置ApplicationContext.xml容器文件[半注解实现] <?xml version="1.0" encoding="UTF-8" ...
- 甄嬛霸气照 —— Chinese Queen
- 特斯拉在感知网络架构引入BEV三维空间转化层
Learnging Where To Look End-to-End
- 亲测可用的 Linux(Ubuntu18.04下)可运行的俄罗斯方块游戏的仿真环境—————————可用于强化学习算法的游戏模拟器环境
俄罗斯方块模拟器(tetris 游戏),Python库地址: https://gitee.com/devilmaycry812839668/gym-tetris 在Python3.7环境下亲测可用: ...
- python语言版(代码):计算百分数的概率单位
相关资料: [转载]百分数的概率单位变换--解惑:概率确实没有单位但是数学里面确实有"概率单位"这个词 百分比与概率单位对照表 https://www.docin.com/p-22 ...
- 再探GraphRAG:如何提升LLM总结能力?
作者:王振亚 编者语: 自微软发布GraphRAG之后,相关解读文层出不穷,其中不乏优秀的内容.比如前段时间转载薛明同学的<微软GraphRAG框架源码解读>让大家快速对GraphRAG的 ...
- ollama安装和运行llama3.1 8b
ollama安装和运行llama3.1 8b conda create -n ollama python=3.11 -y conda activate ollama curl -fsSL https: ...
- [考试记录] 2024.7.15 csp-s模拟赛4
2024.7.15 csp-s模拟赛4 T1 传送带 题面翻译 有一个长度为 \(n\) 的一维网格.网格的第 \(i\) 个单元格包含字符 \(s_i\) ,是"<"或&q ...
- PHP转Go系列 | ThinkPHP与Gin框架之打造基于WebSocket技术的消息推送中心
大家好,我是码农先森. 在早些年前客户端想要实时获取到最新消息,都是使用定时长轮询的方式,不断的从服务器上获取数据,这种粗暴的骚操作实属不雅.不过现如今我也还见有人还在一些场景下使用,比如在 PC 端 ...
- JavaScript设计模式样例十六 —— 备忘录模式
备忘录模式(Memento Pattern) 定义:保存一个对象的某个状态,以便在适当的时候恢复对象.目的:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.场景:数据缓存. ...