0

0

JavaScript 递归构建 JSON 树形结构

心靈之曲

心靈之曲

发布时间:2025-09-13 15:44:01

|

253人浏览过

|

来源于php中文网

原创

javascript 递归构建 json 树形结构

本文介绍如何使用 JavaScript 递归地构建 JSON 树形结构。通过将扁平化的数据转换为嵌套的树形结构,可以更方便地表示层级关系,并在前端界面中进行展示。本文将提供详细的代码示例,并解释关键步骤和注意事项,帮助你理解并掌握递归构建 JSON 树的方法。

递归构建 JSON 树

在 JavaScript 中,使用递归函数可以将扁平化的数据转换为树形结构的 JSON 对象。这种方法适用于具有父子关系的数据,例如组织结构、文件系统等。

基本思路:

  1. 定义一个递归函数,该函数接收一个节点作为输入。
  2. 为当前节点创建一个 JSON 对象,包含必要的属性,例如 label、name、expanded 和 items。
  3. 检查当前节点是否存在子节点。如果存在,则遍历子节点,并递归调用该函数来创建子节点的 JSON 对象。
  4. 将子节点的 JSON 对象添加到当前节点的 items 数组中。
  5. 返回当前节点的 JSON 对象。

代码示例:

立即学习Java免费学习笔记(深入)”;

假设我们有以下格式的输入数据:

const employees = [
  { Id: 1, Name: 'Lauren Boyle', ReportsToId: null },
  { Id: 2, Name: 'Banoth Srikanth', ReportsToId: 1 },
  { Id: 3, Name: 'Stella Pavlova', ReportsToId: 2 },
  { Id: 4, Name: 'Srikanth', ReportsToId: 1 },
];

Id 是员工的唯一标识符,Name 是员工姓名,ReportsToId 是直接上级的 Id。

首先,我们需要将数据转换为以 ReportsToId 为键,员工列表为值的 Map:

VISBOOM
VISBOOM

AI虚拟试衣间,时尚照相馆。

下载
function convertToMap(employees) {
  const map = new Map();
  employees.forEach((employee) => {
    const reportsToId = employee.ReportsToId || 'root'; // 根节点
    if (!map.has(reportsToId)) {
      map.set(reportsToId, []);
    }
    map.get(reportsToId).push(employee);
  });
  return map;
}

const employeeMap = convertToMap(employees);

然后,我们可以使用递归函数构建树形结构:

function buildTree(node, employeeMap) {
  const item = {
    label: node.Name,
    name: node.Id,
    expanded: true,
    items: [],
  };

  if (employeeMap.has(node.Id)) {
    employeeMap.get(node.Id).forEach((childNode) => {
      item.items.push(buildTree(childNode, employeeMap));
    });
  }

  return item;
}

最后,找到根节点并调用 buildTree 函数:

const rootNodes = employeeMap.get('root');
let treeData = [];
if (rootNodes) {
    treeData = rootNodes.map(rootNode => buildTree(rootNode, employeeMap));
}

console.log(JSON.stringify(treeData, null, 2));

输出结果:

[
  {
    "label": "Lauren Boyle",
    "name": 1,
    "expanded": true,
    "items": [
      {
        "label": "Banoth Srikanth",
        "name": 2,
        "expanded": true,
        "items": [
          {
            "label": "Stella Pavlova",
            "name": 3,
            "expanded": true,
            "items": []
          }
        ]
      },
      {
        "label": "Srikanth",
        "name": 4,
        "expanded": true,
        "items": []
      }
    ]
  }
]

注意事项:

  • 避免无限递归: 确保递归函数有明确的终止条件,避免无限递归导致堆栈溢出。在本例中,终止条件是节点没有子节点。
  • 性能考虑: 递归在处理大型数据集时可能会影响性能。可以考虑使用迭代方法来优化性能。
  • 数据格式: 根据实际情况调整输入数据的格式和 JSON 对象的属性。
  • 错误处理: 在实际应用中,需要添加错误处理机制,例如处理循环引用等情况。

总结:

通过递归函数,我们可以方便地将扁平化的数据转换为树形结构的 JSON 对象。这种方法在处理层级关系数据时非常有用。在实际应用中,需要根据具体情况调整代码,并注意避免无限递归和性能问题。通过将数据转换为 Map 能够提升查找效率。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

418

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

535

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

311

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

77

2025.09.10

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

183

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

286

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

258

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

123

2025.08.07

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.2万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号