【JS】检索树结构,并返回结果节点的路径与子节点

【JS】检索树结构,并返回结果节点的路径与子节点

  • 需求
  • 代码
  • 效果展示

需求

一个树结构,需要添加条件检索功能,检索结果依然是一个树结构,包含所有的符合要求的节点,以及他们到根节点的路径,与他们的子节点

代码

searchTree(departments, queryParams) {
      // 用于克隆具有匹配子项的节点的辅助函数
      const cloneWithChildren = (node) => {
        return {
          ...node,
          children: node?.children?.map(cloneWithChildren) || [], // 克隆所有的子节点
        };
      };

      // 核心递归搜索功能
      function searchNode(node, queryParams) {
        let judge = () => {
          let name = queryParams.deptName ? node.deptName.includes(queryParams.deptName) : true;
          let status = ['0', '1'].includes(queryParams.status + '')
            ? queryParams.status + '' === node.status + ''
            : true;
          return name && status;
          //这里是我个人的搜索条件,一个名称的模糊查询与状态值匹配。
        };
        if (judge()) {
          // 如果当前节点包含关键词,克隆整个节点连同其子节点
          return cloneWithChildren(node);
        }
        if (node.children) {
          const matchingChildren = node.children
            .map((child) => searchNode(child, queryParams))
            .filter((child) => child !== null);
          if (matchingChildren.length > 0) {
            // 如果任何子节点包含匹配项,则克隆父节点并连接匹配的子节点
            return { ...node, deptName: node.deptName, children: matchingChildren };
          }
        }
        // 如果当前节点和子节点都不包含关键词,则不包含它在内
        return null;
      }

      // 递归遍历部门列表并构建结果树
      return departments.map((dept) => searchNode(dept, queryParams)).filter((dept) => dept !== null);
    },

效果展示

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

社区分享|简米Ping++基于MeterSphere开展异地测试协作

上海简米网络科技有限公司(以下简称为“简米”)是国内开放银行服务商,高新技术企业,中国支付清算协会会员单位。自2014年成立至今,简米长年聚焦金融科技领域,通过与银行、清算组织等金融机构合作&#xff0…

知识小课堂:在光伏电站中发生绝缘阻抗异常的排查方法

【摘要】近几年,光伏发电技术迅猛发展,光伏扶贫电站及分布式光伏使光伏发电走进千家万户。然而光伏发电设备运行期间仍存在隐患。及时发现并解决*常见异常运行故障,可以很大地提高光伏发电设备可利用率,是保证光伏发电设备正常运行…

会声会影2024软件还包含了视频教学以及模板素材

会声会影2024中文版是一款加拿大公司Corel发布的视频编软件。会声会影2024官方版支持视频合并、剪辑、屏幕录制、光盘制作、添加特效、字幕和配音等功能,用户可以快速上手。会声会影2024软件还包含了视频教学以及模板素材,让用户剪辑视频更加的轻松。 会…

【ArcGIS微课1000例】0078:创建点、线、面数据的最小几何边界

本实例为专栏系统文章:讲述在ArcMap10.6中创建点数据最小几何边界(范围),配套案例数据,持续同步更新! 文章目录 一、工具介绍二、实战演练三、注意事项一、工具介绍 创建包含若干面的要素类,用以表示封闭单个输入要素或成组的输入要素指定的最小边界几何。 工具位于:数…

有没有数字化转型服务提供商推荐?企业数字化转型要如何做?

企业数字化转型涉及将数字技术全面集成到组织的各个方面,深刻地重塑其运营方式并为客户提供价值。这不仅仅是将已经存在的东西自动化,而是代表了一种重要的文化变革,赋予企业不断挑战既定规范、创新和适应的能力。从运营和供应链管理&#xf…

音视频之旅 - 基础知识

图像基础知识 像素 像素是图像的基本单元,一个个像素就组成了图像。你可以认为像素就是图像中的一个点。在下面这张图中,你可以看到一个个方块,这些方块就是像素 分辨率 图像(或视频)的分辨率是指图像的大小或尺寸。…

家庭医生上门预约小程序源码系统 附带完整的搭建教程

在当前的医疗服务市场中,患者往往需要前往医院或诊所进行就诊,这不仅浪费了时间和精力,还可能增加交叉感染的风险。因此,开发一款家庭医生上门预约小程序源码系统,可以让患者在家中方便快捷地预约医生上门服务&#xf…

让我们向您介绍葡萄酒中的皮诺家族

对于那些喜欢浏览商店里的葡萄酒通道或餐厅的葡萄酒菜单的人来说,你可能也注意到了类似名称的葡萄酒,即灰皮诺和黑皮诺葡萄酒。这葡萄酒有什么区别?他们有任何相似之处吗?今天,我们将一探究竟!让我们了解一…

Python设计模式之创建型-单例模式(Singleton)

目录 作用 适用场景 使用模块 使用装饰器 使用元类 __new__方法单例模式 总结 更多关于Python的相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。 注意:本代码示例环境Python版本使用最新的Python3…

网络安全缓冲区溢出实验

实验要求实验步骤函数 f00()函数 f01()函数 f02() 实验要求 C 程序 homework08.c 的主函数如下: int main(int argc, char * argv[]) { init_buf(Lbuffer, LEN);switch(argc) {case 1: f00(); break;case 2: f01(); break;case 3: f02(); break; default: f00(); …

STM32F407-14.3.13-01发生外部事件时清除 OCxREF 信号

发生外部事件时清除 OCxREF 信号 对于给定通道,在 ETRF⑧ 输入施加高电平(相应 TIMx_CCMRx 寄存器中的 OCxCE⑦ 使能位置“1”),可使 OCxREF⑨ 信号变为低电平。OCxREF⑨ 信号将保持低电平,直到发生下一更新事件 (UEV)…

LT8668SXC HDMI转edp1.4/VBO 最高支持8k60hz

HDMI2.1 Receiver ▪ Compliant with HDMI2.1, HDMI2.0b, HDMI1.4 and DVI1.0 ▪ Data rate up to 8Gbps ▪ Support HDCP 1.4/2.3 ▪ Support HDCP repeater ▪ Support RGB 8/10/12 bpc, YCbCr4:4:4/ YCbCr4:2:2/ YCbCr4:2:0 /8/10/12 bpc ▪ Support up to 8K3…

【电路笔记】-电位差

电位差 文章目录 电位差1、概述2、电位差示例13、分压网络4、电位差示例2 电路中任意两点之间的电压差称为电位差,正是这种电位差使电流流动。 1、概述 与以电荷形式围绕闭合电路流动的电流不同,施加的电势差不会移动或流动。 两点之间产生的电势差的单…

生成测试数据的4种方法、5种工具介绍

在软件测试中,测试数据是测试用例的基础,对测试结果的准确性和全面性有着至关重要的影响。 因此,在进行软件测试时,需要生成测试数据以满足测试场景和要求。本文将介绍什么情况下需要生成测试数据,如何生成测试数据&a…

MOS管加三个元件就组成BUCK电路,为何说难点在于电感?

只要是电子产品就需要供电,就离不开电源,那什么是电源:小到手表中的电子,遥控器的电源,大到220V家庭用电,都可以看做是电源。然而在我们的电路设计中,会用到各种芯片,各种芯片所需要…

【算法问题】N 皇后问题

目录 1.问题定义2.思路分析2.1.基于数组的回溯2.2.基于集合的回溯2.3.基于位运算的回溯 3.代码实现 (Java)3.1.基于数组的回溯3.2.基于数组的回溯3.3.基于位运算的回溯 4.扩展 参考:52.N 皇后 II 1.问题定义 (1)在国际象棋的规则中&#xff…

操作教程|JumpServer搭载RD Client App,让你的移动办公更轻松

随着信息技术的普及和发展,移动办公逐渐成为新的时代趋势。移动办公又被称为3A办公,即办公人员可在任何时间(Anytime)、任何地点 (Anywhere)处理与业务相关的任何事情(Anything)。 …

2024年软件测试面试八股文

前言 (第一个就刷掉一大批人) 有很多“会自动化”的同学来咨询技术问题,他总会问到我一些元素定位的问题。元素定位其实都不算自动化面试的问题。 一般我都会问:你是定位不到吗?通常结果都是说确实定位不到。 做自…

本地启动tomcat,打印的日志中中文乱码

修改配置文件 /conf/logging.properties 修改配置项 java.util.logging.ConsoleHandler.encoding 从UTF-8改成GBK

solidity案例详解(六)服务评价合约

有服务提供商和用户两类实体,其中服务提供商部署合约,默认诚信为true,用户负责使用智能合约接受服务及评价,服务提供商的评价信息存储在一个映射中,可以根据服务提 供商的地址来查找评价信息。用户评价信息&#xff0c…