JS实现树形结构数据中特定节点及其子节点显示属性设置的技巧(可用于树形节点过滤筛选)
大家好,今天我要分享的是如何在树形结构的数据中,根据特定条件设置节点及其所有子节点的显示属性。在实际项目中,这种需求非常常见,特别是在需要动态展示和隐藏节点的情况下。下面我将通过一个具体的示例来讲解实现过程。

需求分析
假设我们有一个树形结构的数据,如下所示:
const treeData = [{name: "父节点1",id: 1,children: [{name: "子节点1-1", id: 11, children: [{name: "酸菜", id: 111, children: [{ name: "豆芽", id: 1111, }]}, { name: "豌豆", id: 12, }]},{ name: "子节点1-2", id: 13 }]},{name: "父节点2",id: 2,children: [{ name: "子节点2-1", id: 22, },{name: "子节点2-2",id: 23,children: [{ name: "子节点2-2-1", id: 24 }]}]}];
我们的需求是:当输入一个文本时,找到所有name属性包含该文本的节点,并将这些节点及其所有子节点和所有父节点的show属性设置为true。
实现步骤
-
初始化节点显示属性
在开始遍历之前,我们需要将所有节点的
show属性初始化为false。这可以通过递归遍历实现。 -
递归遍历树形结构
我们编写一个递归函数
traverse,用于遍历树形结构。当找到包含特定文本的节点时,我们需要将该节点及其所有子节点和所有父节点的show属性设置为true。 -
设置子节点显示属性
为了实现这一功能,我们添加了一个内部函数
setChildrenTrue,该函数递归地将所有子节点的show属性设置为true。
代码实现
以下是实现上述需求的完整代码:
function setSearchText(text) {// 初始化所有节点的show属性为falsefunction setFalse(node) {node.show = false;if (node.children) {node.children.forEach(child => setFalse(child));}}// 递归遍历树形结构并设置节点及其子节点和父节点的show属性function traverse(node, parent) {if (node.name.includes(text)) {node.show = true;parents.forEach(parent => {parent.show = true;});function setChildrenTrue(child) {child.show = true;if (child.children) {child.children.forEach(grandChild => setChildrenTrue(grandChild));}}if (node.children) {node.children.forEach(child => setChildrenTrue(child));}} else if (node.children) {node.children.forEach(child => traverse(child,[...parents, node]));}}// 遍历树之前先设置所有节点的show属性为falsetreeData.forEach(node => setFalse(node));// 从根节点开始遍历treeData.forEach(node => {traverse(node, []);});
}// 示例:设置包含"酸菜"的节点及其所有子节点和父节点的show属性为true
setSearchText("酸菜");console.log(treeData);
用于树形节点过滤筛选
通过以上代码,我们成功实现了在树形结构数据中根据特定条件设置节点及其所有子节点的显示属性,通过遍历treeData,生成对应的ul和li,并根据show属性隐藏或显示,就能通过input输入框实现树结构的节点过滤啦
相关文章:
JS实现树形结构数据中特定节点及其子节点显示属性设置的技巧(可用于树形节点过滤筛选)
大家好,今天我要分享的是如何在树形结构的数据中,根据特定条件设置节点及其所有子节点的显示属性。在实际项目中,这种需求非常常见,特别是在需要动态展示和隐藏节点的情况下。下面我将通过一个具体的示例来讲解实现过程。 需求分析…...
第二证券:金价涨了!创一历史之最!
当地时间周四,金融商场进一步消化美联储大幅降息50个基点的利率抉择,认为这是为了完结美国经济“软着陆”的一次防备式降息,而非紧急应对阑珊风险的降息,加之当天公布的上星期初度申请赋闲救助人数低于预期,投资者对美…...
maxwell 输出消息到 kafka
文章目录 1、kafka-producer2、运行一个Docker容器,该容器内运行的是Zendesk的Maxwell工具,一个用于实时捕获MySQL数据库变更并将其发布到Kafka或其他消息系统的应用3、进入kafka容器内部4、tingshu_album 数据库中 新增数据5、tingshu_album 数据库中 更…...
青柠视频云——视频丢包(卡顿、花屏、绿屏)排查
一、问题说明 近期有客户反馈,接入平台的设备经常出来卡顿、花屏、录屏的情况,出现这样的场景很是尴尬。 客户是私有化部署在公网环境,于是我们联系客户,对问题进行追踪排查。 二、场景复现 我们现场情况确认的过程中,…...
单片机原理及应用
引言 单片机(Microcontroller Unit, MCU)作为现代电子技术的核心之一,广泛应用于工业自动化、消费电子、医疗设备、汽车电子、航空航天等多个领域。它集成了CPU(中央处理器)、存储器、输入输出接口及定时/计数器等功能…...
sql中拼接操作
SQL中的拼接操作 常用listagg聚合函数用法 也可用 XMLAGG代替上述操作 常用listagg聚合函数 LISTAGG(column, [separator]) WITHIN GROUP (ORDER BY order_by_clause)column:你想要连接起来的列。 [separator]:可选参数,用于指定列值之间的分…...
基于C语言+SQL Server2008实现(控制台)图书管理系统
第1章 概述 1.1项目背景 随着科技的发展,尤其是计算机技术的迅猛发展,图书馆管理的问题从以往的人工管理,到现在的电脑化,系统化,是对图书馆管理方法的质的飞跃,这些技术不仅让图书馆管理变得更加方便、快…...
Msf之Python分离免杀
Msf之Python分离免杀 ——XyLin. 成果展示: VT查杀率:8/73 (virustotal.com) 火绒和360可以过掉,但Windows Defender点开就寄掉了 提示:我用360测的时候,免杀过了,但360同时也申报了,估计要不了多久就寄…...
electron-updater实现electron全量版本更新
在 Electron 应用中使用 electron-updater 来实现自动更新功能时,通常你会在一个专门的模块或文件中管理更新逻辑。如果你想要使用 ES6 的 import 语法来引入 electron-updater,你需要确保你的项目已经配置好了支持 ES6 模块的构建工具(如 We…...
Mysql梳理6——order by排序
目录 6 order by排序 6.1 排序数据 6.2 单列排序 6.3 多行排列 6 order by排序 6.1 排序数据 使用ORDER BY字句排序 ASC(ascend):升序DESC(descend):降序 ORDER BY子句在SELECT语句的结尾 6.2 单列排序 如果没有使用排序操作,默认…...
Java设计模式—面向对象设计原则(三) -----> 依赖倒转原则DIP(完整详解,附有代码+案例)
文章目录 3.3 依赖倒转原则(DIP)3.3.1概述3.3.2 案例 3.3 依赖倒转原则(DIP) 依赖倒转原则:Dependency Inversion Principle,DIP 3.3.1概述 高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细…...
Linux操作系统 进程(3)
接上文 Linux进程优先级之后,我们了解到僵尸进程与孤儿进程的形成原因,既然是因为父进程没有接收子进程的退出状态导致的,那么我们该如何去获取子进程的退出状态呢?那本篇文章将围绕这个问题来解释进程。 环境 : vsco…...
QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第五期]
QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第五期] 第五期介绍:频道模块之接口授权管理和发言管理 目录 QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第五期]第五期介绍:频道模块之接口授权管理和发言管理获取机器人在频道可用权限列表…...
代码签名证书快速申请指南
申请代码签名证书是确保软件或应用程序在分发和安装过程中不被篡改的重要步骤。以下是详细的快速申请指南: 一、选择证书品牌和服务商 选择知名证书品牌:首先,选择一个国际知名的代码签名证书品牌,如GlobalSign、Digicert、Comod…...
安卓 uniapp跨端开发
HBuilder X 4.24 本地插件方式使用原生插件 例如 MT-TTS 地址PS: 播放 speek({text: ‘test’}) 应为 播放 speak({text: ‘test’})MT-TTS下载下来之后,将 nativeplugins 文件夹拷贝到 uniapp 项目根目录中manifest.json ---- App原生插件配置 运行 语音引擎测试文字转语音播…...
【高阶用法】uniapp的i18n多语言模块修复与增强(Typescript)
痛点 在i18n多语言模块使用过程中,发现下面几个问题,需要解决 1)uni-best框架下,$t功能函数无法实时的切换语言,可能跟使用有关 2)uni-best建议的translate方式在vue块外使用太繁琐,希望不用…...
SQL Server Data Tools (SSDT)入门教程
SSDT (SQL Server Data Tools) 是微软提供的一款用于开发、设计和管理SQL Server数据库的工具。它集成在Visual Studio中,允许开发人员和数据库管理员在统一的环境中进行数据库开发与管理。以下是关于SSDT的详细介绍: 1. 什么是SSDT? SQL S…...
窗户检测系统源码分享
窗户检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …...
2.计算机网络基础
2. 计算机网络基础 (1) 计算机网络的定义 计算机网络是指将地理位置不同、具有独立功能的多个计算机系统通过通信线路和设备连接起来,以功能完善的网络软件实现网络中资源共享的系统。最简单的定义是:计算机网络是一些互相连接的、自治的计算机系统的集合。最庞大的计算机网…...
硬中断,软中断恢复位置
汇编初始化栈指针,interrupt,svc preserve8 ;preserve8 和 restore8 通常用于保护寄存器的状态;以确保在函数调用前后某些寄存器的值保持不变area reset,code,readonlycode32entryb startldr pc,do_undefined;这些地址不能随便写,0x0,0x4,0x8....这些…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
