当前位置: 首页 > news >正文

递归构建树形JSON结构的函数

今天在用KingFusion开发MES系统过程中用到了一个递归构建树形JSON结构的函数,

下面结合AI的解析一起学习一下。

01 函数代码:

function getJsonTree(data, parentId) { var itemArr = []; for (var i = 0; i < data.length; i++) { var node = data[i]; if (node.ParientID == parentId) { var rowData = {}; rowData['id'] = node.c_Code; rowData['text'] = node.c_Name; rowData['parentid'] =node.ParientID; rowData['state'] ='closed'; if(node.ParientID==='ROOT'){ rowData['iconCls']='icon-root'; }else{ rowData['iconCls']='icon-circle'; } rowData['children'] = getJsonTree(data,node.c_Code); itemArr.push(rowData); } } return itemArr; };

02 函数功能

这是一个递归构建树形 JSON 结构的函数,用于将扁平的数组数据(通常来自数据库或接口)转换为层级嵌套的树形结构,常用于前端树形组件(如 EasyUI 的 Tree、ZTree 等)的数据渲染。

03 参数说明

data:扁平的源数据数组,每个元素是一个包含节点信息的对象。

parentId:当前要查找的父节点 ID,用于递归定位子节点层级。

04 逻辑流程解析

①初始化结果数组:

var itemArr=[];

用于存放当前层级的所有节点。

遍历源数据

for (var i = 0; i < data.length; i++) 逐个检查源数据中的每个节点。

③匹配父节点 ID:

if (node.ParientID == parentId) 判断当前节点的父 ID 是否等于传入的parentId。

④构建目标节点对象:

id:取源数据的c_Code字段作为节点唯一标识。

text:取源数据的c_Name字段作为节点显示文本。

parentid:记录当前节点的父 ID(即node.ParientID)。

state:默认设为'closed'(表示节点初始折叠状态,常见于 EasyUI Tree)。

iconCls:根据父 ID 是否为'ROOT'设置不同图标类名(根节点用icon-root,其他用icon-circle)。

⑤递归查找子节点:

rowData['children'] = getJsonTree(data, node.c_Code); 以当前节点的c_Code作为新的parentId,递归调用自身查找子节点,赋值给children属性。

⑥收集节点:

itemArr.push(rowData); 将构建好的节点对象加入当前层级结果数组。

⑦返回结果:

循环结束后,返回当前层级的节点数组。

05 注意事项

①递归终止条件:

当某个parentId在源数据中没有匹配的node.ParientID时,递归自然终止。

②适用场景:

要求源数据必须是扁平结构,且每个节点包含明确的父ID字段和自身ID字段(这里分别是ParientID和c_Code)。

http://www.jsqmd.com/news/790266/

相关文章:

  • 利用Taotoken多模型能力为AIGC应用提供不同风格的文本生成
  • 别再手动搭环境了!用这个开源工具5分钟在线调试Vue组件(支持Element-UI和iView)
  • 在OpenClaw中配置Taotoken作为大模型供应商的详细步骤
  • 如何永久重置IDM试用期:完整免费使用指南
  • AI原生MLOps落地失败率高达68%?(2026奇点大会闭门报告首度解密:模型漂移响应延迟>11.3秒即触发SLA熔断)
  • 从Python列表到Numpy数组:手把手教你数据科学入门必备的ndarray操作避坑指南
  • 069、连续轨迹运动:样条插值(B样条)
  • 如何验证降AI效果:降AI完成后AIGC检测验收完整操作流程免费教程
  • Meshroom完整指南:三步从照片到3D模型的魔法转换
  • 别再为驱动发愁了!实测Realtek RTL8156B-CG这款2.5G USB网卡的免驱体验到底有多香
  • 平衡车/四轴飞行器新手必看:用互补滤波搞定MPU6050姿态解算(附Arduino代码)
  • AI原生CI/CD的“最后一公里”破局:SITS2026如何用动态沙箱+意图验证双机制终结幻觉部署
  • 运城门窗推荐|本土合规型材门窗企业 山西铭发铝业实力综述 - 江湖评测
  • 终极指南:3分钟掌握B站成分检测器,让评论区用户画像一目了然
  • 新手教程使用curl命令在任意环境中测试Taotoken大模型接口
  • 【AI原生设计权威指南】:SITS 2026官方认证的10大落地实践,错过再等三年?
  • VLC流媒体服务器实战:从UDP到TCP的协议选择与配置详解
  • 5分钟终极指南:Steam成就管理器如何帮你找回错过的游戏成就
  • wiliwili终极指南:如何在Switch上打造完美的B站观影体验
  • 【SITS2026终极避坑指南】:从签证到展位选择,资深参会者绝不告诉你的9个实战细节
  • 如何一键解锁QQ音乐加密文件:qmcflac2mp3终极解决方案
  • 【AI原生知识图谱构建实战白皮书】:2026奇点大会KG落地的7大核心范式与3类避坑红线
  • Gemini3.1Pro实战:打造可审计CI/CD流水线
  • AI编程代理看板调度中心:Claw-Kanban的设计、部署与实战
  • 基于AD7606八通道高速数据采集模块的Python数据流处理实战
  • 从需求到上线:用Markdown甘特图管理你的个人Side Project(含Mermaid配置)
  • AI原生用户体验设计实战手册(SITS 2026认证级方法论)
  • 别再关DRC警告了!手把手教你用AD19正确设置3D封装高度偏移,解决PCB叠层干涉
  • 法学论文降AI工具免费推荐:2026年法学毕业论文知网AIGC检测4.8元亲测99.26%达标完整方案
  • 如何永久保存微信聊天记录?三步搞定数据备份与深度分析指南