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

JS通过递归函数来剔除树结构特定节点

 最近在处理权限类问题过程中,遇到多次需要过滤一下来列表的数据,针对不同用户看到的数据不同。记录一下

我的数据大致是这样的:

class UserTree {constructor() {this.userTreeData = [// 示例数据{ nodeid: "1", nodename: "Root", parentid: null, children: [{ nodeid: "2", nodename: "Child 1", parentid: "1", children: [] },{ nodeid: "3", nodename: "Child 2", parentid: "1", children: [{ nodeid: "67176000000000000000000000000000", nodename: "Grandchild 1", parentid: "3", children: [] },{ nodeid: "4", nodename: "Another Grandchild", parentid: "3", children: [{ nodeid: "67176000000000000000000000000001", nodename: "Great Grandchild", parentid: "67176000000000000000000000000000", children: [] }] }] }] }];}// 递归函数来剔除特定节点以及parentid为特定值的节点removeNodeByIdAndParentId(tree, nodeId) {if (!tree || tree.length === 0) return;for (let i = 0; i < tree.length; i++) {if (tree[i].nodeid === nodeId || tree[i].parentid === nodeId) {tree.splice(i, 1); // 删除节点i--; // 更新索引以继续检查下一个元素} else if (tree[i].children && tree[i].children.length > 0) {// 递归遍历子节点this.removeNodeByIdAndParentId(tree[i].children, nodeId);}}}// 初始化用户树数据initUserTreeData() {// 需要剔除的节点IDconst targetNodeId = "67176000000000000000000000000000";// 调用递归函数来剔除节点this.removeNodeByIdAndParentId(this.userTreeData, targetNodeId);// 继续其他初始化逻辑...}
}// 测试
let userTree = new UserTree();
console.log("Before removal:", JSON.stringify(userTree.userTreeData, null, 2));
userTree.initUserTreeData();
console.log("After removal:", JSON.stringify(userTree.userTreeData, null, 2));
  1. 递归函数 removeNodeByIdAndParentId:这个函数会检查每个节点,如果节点的 nodeid 或 parentid 为目标节点ID,则将该节点及其子节点一并删除。
  2. 递归调用:在删除当前节点后,更新索引(i--),以便继续检查下一个元素。这样可以确保不会跳过任何元素。
  3. 初始化函数 initUserTreeData:在初始化函数中调用递归函数来剔除目标节点及其子节点。

相关文章:

JS通过递归函数来剔除树结构特定节点

最近在处理权限类问题过程中&#xff0c;遇到多次需要过滤一下来列表的数据&#xff0c;针对不同用户看到的数据不同。记录一下 我的数据大致是这样的&#xff1a; class UserTree {constructor() {this.userTreeData [// 示例数据{ nodeid: "1", nodename: "R…...

javayufa

1.变量、运算符、表达式、输入输出 编写一个简单的Java程序–手速练习 public class Main { public static void main(String[] args) { System.out.println("Hello World"); } } 三、语法基础 变量 变量必须先定义&#xff0c;才可以使用。不能重名。 变量定义的方…...

软考-高级系统分析师知识点-补充篇

云计算 云计算的体系结构由5部分组成&#xff0c;分别为应用层&#xff0c;平台层&#xff0c;资源层&#xff0c;用户访问层和管理层&#xff0c;云计算的本质是通过网络提供服务&#xff0c;所以其体系结构以服务为核心。 系统的可靠性技术---容错技术---冗余技术 容错是指系…...

JavaScript全面指南(四)

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;JavaScript篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript全面指南 目录 61、如何防止XSRF攻击 62、如何判断一个对象是否为数组&…...

2024年诺贝尔物理学奖的创新之举

对于2024年诺贝尔物理学奖的这一创新之举&#xff0c;我的观点可以从以下几点展开&#xff1a; 跨学科融合的里程碑&#xff1a;将诺贝尔物理学奖颁发给机器学习与神经网络领域的研究者&#xff0c;标志着科学界对跨学科合作和融合的认可达到新高度。这不仅体现了理论物理与计算…...

FileLink内外网文件交换——致力企业高效安全文件共享

随着数字化转型的推进&#xff0c;企业之间的文件交流需求日益增加。然而&#xff0c;传统的文件传输方式往往无法满足速度和安全性的双重要求。FileLink作为一款专注于跨网文件交换的工具&#xff0c;致力于为企业提供高效、安全的文件共享解决方案。 应用场景一&#xff1a;项…...

使用Python在Jupyter Notebook中显示Markdown文本

使用Python在Jupyter Notebook中显示Markdown文本 引言1. 导入必要的模块2. 定义一个函数来显示Markdown文本3. 使用print_md函数显示Markdown文本4. 总结 引言 作为一名Python初级程序员&#xff0c;你可能已经熟悉了Jupyter Notebook这个强大的工具。Jupyter Notebook不仅支…...

G1 GAN生成MNIST手写数字图像

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 G1 GAN生成MNIST手写数字图像 1. 生成对抗网络 (GAN) 简介 生成对抗网络 (GAN) 是一种通过“对抗性”学习生成数据的深度学习模型&#xff0c;通常用于生成…...

WPFDeveloper正式版发布

WPFDeveloper WPFDeveloper一个基于WPF自定义高级控件的WPF开发人员UI库&#xff0c;它提供了众多的自定义控件。 该项目的创建者和主要维护者是现役微软MVP 闫驚鏵: https://github.com/yanjinhuagood 该项目还有众多的维护者&#xff0c;详情可以访问github上的README&…...

实现鼠标经过某个元素时弹出提示框(通常称为“工具提示”或“悬浮提示”)

要实现鼠标经过某个元素时弹出提示框&#xff08;通常称为“工具提示”或“悬浮提示”&#xff09;&#xff0c;你可以使用 JavaScript 结合 CSS 来创建这个效果。以下是详细步骤&#xff0c;包括 HTML、CSS 和 JavaScript 的代码示例。 HTML 结构 首先&#xff0c;创建一个简…...

【GAMES101笔记速查——Lecture 17 Materials and Appearances】

目录 1 材质和外观 1.1 自然界中&#xff0c;外观是光线和材质共同作用的结果 1.2 图形学中&#xff0c;什么是材质&#xff1f; 1.2.1 渲染方程严格正确&#xff0c;其中BRDF项决定了物体的材质 1.2.2 漫反射材质 &#xff08;1&#xff09;如何定义漫反射系数&#xff1…...

对于从vscode ssh到virtualBox的timeout记录

如题&#xff0c;解决方式如下&#xff1a; 1.把虚拟机关机退出来&#xff0c;在这个界面进行网络设置&#xff1a;选桥接网卡 2.然后再进系统&#xff0c;使用命令 ip addr查看如今的ip地址&#xff0c;应该和在本机里面看到的是一个网段 3.打开vscode&#xff0c;该干啥干…...

鸿蒙原生应用扬帆起航

就在2024年6月21日华为在开发者大会上发布了全新操作的系统HarmonyOS Next开发测试版&#xff0c;网友们把它称之为“称之为纯血鸿蒙”。因为在此之前鸿蒙系统底层式有两套基础架构的&#xff0c;一套是是Android的AOSP&#xff0c;一套是鸿蒙的Open Harmony&#xff0c;因为早…...

《计算机视觉》—— 表情识别

根据计算眼睛、嘴巴的变化&#xff0c;判断是什么表情结合以下两篇文章来理解表情识别的实现方法 基于 dilib 库的人脸检测 https://blog.csdn.net/weixin_73504499/article/details/142977202?spm1001.2014.3001.5501 基于 dlib 库的人脸关键点定位 https://blog.csdn.net/we…...

NVIDIA Aerial Omniverse

NVIDIA Aerial Omniverse 数字孪生助力打造新一代无线网络 文章目录 前言一、从链路级仿真到系统级仿真二、转变无线研发方式1. 开放且可定制的模块化平台2. 适用于 6G 标准化的 3GPP 兼容平台3. 部署前测试4. AI 和 ML 在数字孪生中的应用5. 高级物理精准的电磁求解器6. 合作伙…...

QT程序报错解决方案:Cannot queue arguments of type ‘QTextCharFormat‘ 或 ‘QTextCursor‘

项目场景&#xff1a; 项目场景&#xff1a;基于QT实现的C某程序&#xff0c;搭载在Linux环境中。 问题描述 执行程序时&#xff0c;发现log中报错如下内容&#xff1a; QObject::connect: Cannot queue arguments of type QTextCharFormat (Make sure QTextCharFormat is r…...

MySQL知识点_03

MySQL 命令大全 基础命令 操作命令连接到 MySQL 数据库mysql -u 用户名 -p查看所有数据库SHOW DATABASES;选择一个数据库USE 数据库名;查看所有表SHOW TABLES;查看表结构DESCRIBE 表名; 或 SHOW COLUMNS FROM 表名;创建一个新数据库CREATE DATABASE 数据库名;删除一个数据库D…...

leetcode:744. 寻找比目标字母大的最小字母(python3解法)

难度&#xff1a;简单 给你一个字符数组 letters&#xff0c;该数组按非递减顺序排序&#xff0c;以及一个字符 target。letters 里至少有两个不同的字符。 返回 letters 中大于 target 的最小的字符。如果不存在这样的字符&#xff0c;则返回 letters 的第一个字符。 示例 1&a…...

2015年-2016年 软件工程程序设计题(算法题)实战_c语言程序设计数据结构程序设计分析

文章目录 2015年1.c语言程序设计部分2.数据结构程序设计部分 2016年1.c语言程序设计部分2.数据结构程序设计部分 2015年 1.c语言程序设计部分 1.从一组数据中选择最大的和最小的输出。 void print_maxandmin(double a[],int length) //在一组数据中选择最大的或者最小的输出…...

整理一下实际开发和工作中Git工具的使用 (持续更新中)

介绍一下Git 在实际开发和工作中&#xff0c;Git工具的使用可以说是至关重要的&#xff0c;它不仅提高了团队协作的效率&#xff0c;还帮助开发者有效地管理代码版本。以下是对Git工具使用的扩展描述&#xff1a; 版本控制&#xff1a;Git能够跟踪代码的每一个修改记录&#x…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...