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

news/2024/10/20 18:52:29/

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

我的数据大致是这样的:

javascript">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:在初始化函数中调用递归函数来剔除目标节点及其子节点。

http://www.ppmy.cn/news/1540592.html

相关文章

Git 提交规范参考

Git 提交规范参考 feat 增加新的业务功能fix 修复业务问题/BUGperf 优化性能style 更改代码风格, 不影响运行结果refactor 重构代码revert 撤销更改test 测试相关, 不涉及业务代码的更改docs 文档和注释相关chore 更新依赖/修改脚手架配置等琐事workflow 工作流改进ci 持续集成…

Java集合(四)--treeset/treemap/章节练习题目/去重原理的解读和应用

文章目录 1.treeset结构2.treemap结构3.集合去重辨析总结4.对于arraylist的练习题目5.对于HashMap的练习题目6.第三点的去重运用7.HashSe练习题目 1.treeset结构 下面的这个就是对于这个treeset结构进行测试的一个程序&#xff0c;在这个里面&#xff0c;add表示的就是对于这个…

YOLOv11改进策略【卷积层】| SAConv 可切换的空洞卷积 二次创新C3k2

一、本文介绍 本文记录的是利用SAConv优化YOLOv11的目标检测网络模型。空洞卷积是一种在不增加参数量和计算量的情况下,通过在卷积核元素之间插入空洞来扩大滤波器视野的技术。并且为了使模型能够适应不同尺度的目标,本文利用SAConv将不同空洞率卷积结果进行结合,来获取更全…

小说漫画系统 fileupload.php 任意文件上传漏洞复现

FOFA搜索语句 "/Public/home/mhjs/jquery.js" 漏洞复现 1.向靶场发送如下数据包 POST /Public/webuploader/0.1.5/server/fileupload.php HTTP/2 Host: xxx.xxx.xx.xx Cookie: PHPSESSID54bc7gac1mgk0l3nm8cv6sek07; uloginid677742617 Cache-Control: max-age0…

基于SpringBoot+Vue+uniapp的在线招聘平台的详细设计和实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

(二十)、从宿主机访问 k8s(minikube) 发布的 redis 服务

文章目录 1、环境准备2、具体操作2.1、启动 minikube (start/stop)2.2、准备 redis-deployment.yaml2.3、执行 redis-deployment.yaml2.3.1、查看 pod 信息和日志 2.4、检查部署和服务状态2.4.1、如果需要删除 3、查看 IP 的几个命令3.1、查看IP的几个命令3.2、解读3.3、宿主机…

河源市社保卡照片要求及手机自拍拿数码相片回执的方法

河源市的居民在申请或更新社保卡时&#xff0c;需要提交一张符合特定要求的照片。如果您需要更新或申请社保卡&#xff0c;本文将为您详细介绍河源市社保卡照片的规格要求&#xff0c;并指导您如何通过手机自拍获取符合标准的社保卡照片及回执。 根据河源市社保局的指南&#x…

写一段代码判断素数的函数,从主函数中输出一个整数,判断它是否为素数。

C语言关于函数的应用:判断它函数是否为素数。 prime就是用来判断素数的调用函数。 从主函数main开始输出&#xff0c;先输入一个整数&#xff0c;再通过调用函数prime 带来的数字去判断它是否为素数&#xff0c;因为是判断是否为素数&#xff0c;所以真就是素数&#xff0c;…