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

实现步骤

  1. 初始化节点显示属性

    在开始遍历之前,我们需要将所有节点的show属性初始化为false。这可以通过递归遍历实现。

  2. 递归遍历树形结构

    我们编写一个递归函数traverse,用于遍历树形结构。当找到包含特定文本的节点时,我们需要将该节点及其所有子节点和所有父节点的show属性设置为true

  3. 设置子节点显示属性

    为了实现这一功能,我们添加了一个内部函数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输入框实现树结构的节点过滤啦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/428110.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有关C# .NET Core 过滤器的使用

想用一个过滤器实现特定接口的审核日志记录,结果报了错,看了看感觉有些基础要补,所以想记录下来 错误: 在属性过滤器中使用了依赖注入,结果在应用在控制层接口时报了传参的错 //过滤器 public class AuditRecordFil…

tcpdump使用方法

一、centos上可以采用下面的命令进行安装。 yum install tcpdump 二、实例: 1、监视指定网络接口的数据包 即监听指定网卡的数据包,若不指定网卡,默认tcpdump只会监视第一个网络接口。如监听 eth0网卡,如下: tcpd…

Double-Fetch漏洞检测工具的部署、使用与原理分析

文章目录 前言1、概述1.1、简介1.2、工作原理1.2.1、内核空间与用户空间的信息传递1.2.2、Double-Fetch漏洞产生的原因1.2.3、产生Double-Fetch漏洞的情况1.2.4、一个Double-Fetch漏洞示例1.2.5、Double-Fetch漏洞检测工具原理 1.3、模式匹配原理分析1.3.1、Coccinelle介绍1.3.…

大厂程序员的健身之路

大厂程序员的健身之路 基本信息饮食正餐营养补剂 睡眠训练计划 基本信息 健身时间:2023.03 -> 2024.09体重变化:52kg -> 67kg 饮食 正餐 早餐:不吃午餐:两碗米饭 鱼/鸡肉 蔬菜 酸奶晚餐:两碗米饭 鱼/鸡肉…

java之杨辉三角问题

给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 如何实现呢? 思路:首先,我们可以将杨辉三角视作i行j列的二维数组。除了第一行和第二行之外&am…

BuripSuiteProfessional 抓取HTTPS配置

1.电脑拿开代理 谷歌为例 点击三点-设置 -输入代理--点击代理设置 打开手动代理---IP ,端口如图-点击保存 2.下载CA证书 打开代理后,谷歌浏览器打开,输入/burp--如下图-点击CA证书下载证书 选择下载目录--桌面 3.安装CA证书 谷歌浏览器中点开设置-输入证书-点击安全 点击…

传知代码-多示例AI模型实现病理图像分类

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 本文将基于多示例深度学习EPLA模型实现对乳腺癌数据集BreaKHis_v1的分类。EPLA模型是处理组织病理学图像的经典之作。EPLA模型是基于多示例学习来进行了,那么多示例学习模型对处理病理学图像具有…

优化算法(一)—遗传算法(Genetic Algorithm)附MATLAB程序

遗传算法(Genetic Algorithm, GA)是一种启发式搜索算法,用于寻找复杂优化问题的近似解。它模拟了自然选择和遗传学中的进化过程,主要用于解决那些传统算法难以处理的问题。 遗传算法的基本步骤: 初始化种群&#xff0…

GNN-RAG:用于大模型推理的图神经检索

GNN-RAG:用于大模型推理的图神经检索 秒懂大纲提出背景解法拆解全流程优化创意总结 论文:GNN-RAG: Graph Neural Retrieval for Large Language Model Reasoning 代码:https://github.com/cmavro/GNN-RAG 秒懂大纲 ├── GNN-RAG【主题】…

美国站群服务器优化技巧解析

美国站群服务器,作为专为管理多个网站而设计的托管解决方案,其优化对于提升网站性能和用户体验至关重要。以下是一些关键的优化技巧: 首先,硬件配置是基础。选择高性能的CPU、大容量的内存以及高速的硬盘(如SSD)是提升服务器运算速…

Java 集合详解

目录 一. 概述 二. Collection接口实现类 三. Map接口实现类 四. 线程安全集合 五. List接口下集合实现原理 1. ArrayList实现原理 1.1. 基于动态数组 1.2. 随机访问 1.3. 添加元素 1.4. 删除元素 1.5. 迭代器 1.6. 克隆和序列化 1.7. ArrayList简单使用 2. Link…

Linux环境变量进程地址空间

目录 一、初步认识环境变量 1.1常见的环境变量 1.2环境变量的基本概念 二、命令行参数 2.1通过命令行参数获取环境变量 2.2本地变量和内建命令 2.3环境变量的获取 三、进程地址空间 3.1进程(虚拟)地址空间的引入 3.2进程地址空间的布局和理解 …

11年计算机考研408-数据结构

设执行了k次。 解析: d要第一个出,那么abc先入栈,d入栈然后再出栈,这前面是一个固定的流程,后面就很灵活了,可以ecba,ceba,cbea,cbae。 答案是4个序列。 解析&#xff1a…

【论文阅读】PERCEIVER-ACTOR: A Multi-Task Transformer for Robotic Manipulation

Abstract transformers凭借其对大型数据集的扩展能力,彻底改变了视觉和自然语言处理。但在机器人操作中,数据既有限又昂贵。通过正确的问题表述,操纵仍然可以从变形金刚中受益吗?我们使用peract来研究这个问题,peract…

Spring Boot利用dag加速Spring beans初始化

1.什么是Dag? 有向无环图(Directed Acyclic Graph),简称DAG,是一种有向图,其中没有从节点出发经过若干条边后再回到该节点的路径。换句话说,DAG中不存在环路。这种数据结构常用于表示并解决具有依赖关系的问题。 DAG的…

elasticsearch同步mysql方案

文章目录 1、1. 使用数据库触发器2. 使用定时任务3. 监听MySQL二进制日志(binlog)4. 使用数据管道5. 使用第三方工具或服务6. 编写自定义脚本注意事项 2、1. 使用Logstash步骤:示例配置: 2. 使用Debezium步骤: 3. 自定…

【Redis入门到精通三】Redis核心数据类型(List,Set)详解

目录 Redis数据类型 ​编辑 1.List类型 (1)常见命令 (2)内部编码 2.Set类型 (1)常见命令 (2)内部编码 Redis数据类型 查阅Redis官方文档可知,Redis提供给用户的核…

JavaScript - Document文档操作

1. 前言 ​​​​​​​ 编写网页时,我们需要时刻操作文档进而完成我们想要的效果。这就是通过文档对象模型实现,使用Document对象控制HTML以及样式信息的API 2. Document的树结构 在了解Document文档对象模型之前,我们先了解Dom的树结构 …

使用scp命令从本地往服务器传输文件失败

解决办法: 找到这个文件,打开,将里面的服务器ip对应的一行数据删掉即可。

(c语言+数据结构链表)项目:贪吃蛇

目录 1.项目背景 2.游戏效果演⽰ 3. ⽬标 4. 技术要点 5. Win32 API介绍 5.1 Win32 API 5.2 控制台程序 5.3 控制台屏幕上的坐标COORD 5.4 GetStdHandle 5.5 GetConsoleCursorInfo 5.5.1 CONSOLE_CURSOR_INFO 5.6 SetConsoleCursorInfo 5.7 SetConsoleCursorPositi…