news 2026/4/16 16:06:35

深度优先遍历:JavaScript递归查找树形数据结构中的节点标签

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度优先遍历:JavaScript递归查找树形数据结构中的节点标签

概述

在Web开发中,我们经常需要处理树形结构数据(如组织架构、分类目录、菜单等)。今天我将分享一个实用的JavaScript方法,用于在复杂的树形数据结构中根据ID查找对应的节点标签。

核心算法

/** * 根据id在树形数据结构中查找对应的节点 * @param {string|number} id - 要查找的节点ID * @param {Array|Object} data - 树形数据结构(数组或对象) * @returns {Object|null} 找到返回完整的节点对象,找不到返回null */ findLabelById(id, data) { // 边界条件处理:如果data为空或未定义,直接返回null if (!data) { return null; } // 情况1:data是数组(树的根节点或子节点数组) if (Array.isArray(data)) { for (let i = 0; i < data.length; i++) { const result = this.findLabelById(id, data[i]); if (result !== null) { return result; } } return null; } // 情况2:data是对象(单个节点) if (data && typeof data === 'object') { // 如果当前节点的id匹配目标id,返回当前节点 if (data.id === id) { return data; } // 如果当前节点有子节点,递归查找子节点 if (data.children && Array.isArray(data.children) && data.children.length > 0) { for (let i = 0; i < data.children.length; i++) { const result = this.findLabelById(id, data.children[i]); if (result !== null) { return result; } } } } // 未找到匹配的节点 return null; }

使用示例

const treeData = [ { id: 1, label: "节点1", children: [ { id: 11, label: "节点1-1", children: [ { id: 111, label: "节点1-1-1" }, { id: 112, label: "节点1-1-2" } ] }, { id: 12, label: "节点1-2" } ] }, { id: 2, label: "节点2", children: [ { id: 21, label: "节点2-1" } ] } ];

查找示例

// 查找存在的节点 const node = findLabelById(111, treeData); console.log(node); // 输出:{ id: 111, label: "节点1-1-1" } // 查找不存在的节点 const notFound = findLabelById(999, treeData); console.log(notFound); // 输出:null
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 10:43:28

GitHub上发现近乎完美的免费大模型课程!科学家+工程师双路径学习路线,附带实战Notebook,小白/程序员必收藏!

简介 GitHub上发现近乎完美的免费大语言模型课程&#xff0c;提供科学家和工程师双路径学习路线。科学家路径涵盖模型训练全流程&#xff0c;工程师路径专注于应用开发。课程包含8个开箱即用的Google Colab工具&#xff0c;大幅降低技术门槛。项目持续更新&#xff0c;提供精选…

作者头像 李华
网站建设 2026/4/16 11:11:57

算法题 钥匙和房间

841. 钥匙和房间 问题描述 有 n 个房间&#xff0c;编号从 0 到 n-1。每个房间都有一些钥匙&#xff0c;可以打开其他房间。 给定一个数组 rooms&#xff0c;其中 rooms[i] 是一个列表&#xff0c;表示你进入房间 i 后可以拿到的所有钥匙&#xff08;钥匙对应房间的编号&#x…

作者头像 李华
网站建设 2026/4/16 11:08:55

都是技术圈,为啥程序员怕过 35 岁,网安人反而越老越吃香?

同样是技术岗&#xff0c;为啥程序员怕35岁危机&#xff0c;网安却越老越值钱&#xff1f; 你有没有发现&#xff0c;身边做程序员的朋友&#xff0c;一到 30 岁就开始焦虑 “35 岁后怎么办”&#xff0c;但做网安的前辈&#xff0c;反而越往后越吃香&#xff0c;薪资和话语权…

作者头像 李华
网站建设 2026/4/16 11:12:02

三菱FX PLC组态下的五层电梯智能控制系统方案

No.1294 三菱FX PLC基于组态王五层电梯控制系统刚整完一个五层电梯的PLC控制项目&#xff0c;用的三菱FX3U和组态王上位机。这玩意儿看起来简单&#xff0c;实际操作起来坑真不少。先说说硬件配置&#xff0c;PLC这边用了32点的FX3U-32MT&#xff0c;带两个扩展模块搞楼层信号采…

作者头像 李华
网站建设 2026/4/16 13:03:22

基于 STM32 的简易电子秤仿真系统

1. 引言&#xff1a; 简易电子秤仿真系统的设计背景与意义 在家庭日常称重&#xff08;如食材重量、快递称重&#xff09;、小型商铺零售&#xff08;如零食、干货称重&#xff09;等场景中&#xff0c;传统机械秤存在精度低&#xff08;误差 5g 以上&#xff09;、读数不便、无…

作者头像 李华