首页 > 其他分享 >过滤树,返回符合条件的节点以及它的上级节点,以及是否保留它的下级节点

过滤树,返回符合条件的节点以及它的上级节点,以及是否保留它的下级节点

时间:2023-09-13 18:13:05浏览次数:35  
标签:arr return children item 过滤 keepChildren 下级 节点

const filterReceiveDeptTree = computed(() => {
    if (state.filterText) {
        let deepclone = deepClone(state.receiveDeptTree);

        const filteredTree = filterTree(
            deepclone,
            (node) => {
                return node.name.includes(state.filterText);
            },
            state.switchKeepPers
        );
        console.log(filteredTree);
        return filteredTree;
    } else {
        return state.receiveDeptTree;
    }
});

/**
 * 过滤树,返回符合条件的节点以及它的上级节点,以及是否保留它的下级节点
 * @param {*} node 树节点
 * @param {*} conditions 过滤条件
 * @param {*} keepChildren 是否保留子节点
 */
const filterTree = (node, conditions, keepChildren = true) => {
    return node.filter((item) => {
        // 节点本身符合条件
        if (conditions(item)) {
            // 如果有子节点,返回符合条件的子节点
            if (item.children && item.children.length && keepChildren == false) {
                item.children = filterTree(item.children, conditions, keepChildren);
            }
            // 保留人员节点
            else if (item.children && item.children.length && keepChildren == true) {
                let dept = item.children.filter((s) => s.type == 'JG');
                let pers = item.children.filter((s) => s.type == 'RY');

                let arr = [];
                if (dept.length) {
                    let res = filterTree(dept, conditions, keepChildren);
                    arr = arr.concat(res);
                }
                if (pers.length) {
                    arr = arr.concat(pers);
                }
                if (arr.length) {
                    item.children = arr;
                    return true;
                }
            }
            return true;
        }
        // 节点本身不符合条件,但是子节点有符合条件的
        else if (item.children && item.children.length) {
            // 递归过滤子节点,返回符合条件的子节点
            const res = filterTree(item.children, conditions, keepChildren);
            if (res.length) {
                item.children = res;
                return true;
            }
        }
        return false;
    });
};

标签:arr,return,children,item,过滤,keepChildren,下级,节点
From: https://www.cnblogs.com/lbx6935/p/17700373.html

相关文章

  • 抓包软件Wireshark常用过滤使用方法命令
    抓包软件Wireshark常用过滤使用方法命令过滤源ip、目的ip。在wireshark的过滤规则框Filter中输入过滤条件。如查找目的地址为192.168.101.8的包,ip.dst192.168.101.8;查找源地址为ip.src1.1.1.1端口过滤。如过滤80端口,在Filter中输入,tcp.port80,这条规则是把源端口和目的端口为80的......
  • HBase学习4(导入数据、计数器、scan扫描、过滤器)
    1.导入数据集先上传文件到指定目录,后执行下面的语句hbaseshell/export/software/ORDER_INFO.txt 2.查看表中有多少条数据(计数器)语法:count‘表名’缺点:比较慢,当数据量更大的时候可以使用HBase中提供的MapReduce程序来进行计数统计。要启动好,需要注意,以下三步不是在hb......
  • 在线问诊 Python、FastAPI、Neo4j — 创建症状节点
    目录参考创建药品节点。importloggingfromutils.neo4j_providerimportdriverlogging.root.setLevel(logging.INFO)#并生成CQLdefgenerate_cql()->str:cql="""CREATE(symptom1:Symptom{name:"膝盖疼"}),(symptom2......
  • MGR新节点RECOVERING状态的分析与解决:caching_sha2_password验证插件的影响
    MGR新节点RECOVERING状态的分析与解决:caching_sha2_password验证插件的影响起因在GreatSQL社区上有一位用户提出了“手工构建MGR碰到的次节点一直处于recovering状态”,经过排查后,发现了是因为新密码验证插件caching_sha2_password导致的从节点一直无法连接主节点,帖子地址:(https:/......
  • Linux之查找过滤(tail、grep、find)
    参考:https://www.cnblogs.com/caoweixiong/p/15218826.htmltail基本格式tail[-f][-cNumber|-nNumber|-mNumber|-bNumber|-kNumber][File]参数解释-f该参数用于监视File文件增长。-cNumber从Number字节位置读取指定文件-nNumber从Number行......
  • 带过滤条件的聚合
         ......
  • 条件过滤
            ......
  • 安防监控/视频汇聚/云存储/AI智能视频分析平台EasyCVR下级海康设备无法级联是什么原因
    安防视频监控平台/视频集中存储/云存储/磁盘阵列EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。有用户反馈,在使用下级平台的海康设备级联到视频监控Easy......
  • 实现类似elementui中的树节点过滤效果
    filterTree(tree,arr=[]){letthat=thisif(!tree.length)return[];for(letitemoftree){letnode={}if(item.name.indexOf(this.searchVal)>-1){constitemValue={...item};node={......
  • 安防监控/视频汇聚/云存储/AI智能视频分析平台EasyCVR下级海康设备无法级联是什么原因
    安防视频监控平台/视频集中存储/云存储/磁盘阵列EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。有用户反馈,在使用下级平台的海康设备级联到视频监控Easy......