• 递归树,并形成新的树结构


     const result = this.deal(this.data.getWorkListArrOld, node => node.label.indexOf(e.detail.value)!=-1);
    
        console.log(JSON.stringify(result, null, 4));
    
    /**
     * 递归过滤节点,生成新的树结构
     * @param {Node[]} nodes 要过滤的节点
     * @param {node => boolean} predicate 过滤条件,符合条件的节点保留
     * @return 过滤后的节点
     */
    deal(nodes, predicate) {
      // 如果已经没有节点了,结束递归
      if (!(nodes && nodes.length)) {
          return;
      }
    
      const newChildren = [];
      for (const node of nodes) {
          if (predicate(node)) {
              // 如果自己(节点)符合条件,直接加入到新的节点集
              newChildren.push(node);
              // 并接着处理其 children
              node.children = this.deal(node.children, predicate);
          } else {
              // 如果自己不符合条件,需要根据子集来判断它是否将其加入新节点集
              // 根据递归调用 deal() 的返回值来判断
              const subs = this.deal(node.children, predicate);
    
              // 以下两个条件任何一个成立,当前节点都应该加入到新子节点集中
            // 1. 子孙节点中存在符合条件的,即 subs 数组中有值
            // 2. 自己本身符合条件
            if ((subs && subs.length) || predicate(node)) {
                node.children = subs;
                newChildren.push(node);
            }
              /* if (subs && subs.length) {
                  // 1. 如果子孙集中有符合要求的节点(返回 [...]),加入
                  node.children = subs;
                  newChildren.push(node);
              } */
              // 2. 否则,不加入(因为整个子集都没有符合条件的)
          }
      }
      return newChildren.length ? newChildren : void 0;
    },
    

      该 效果为搜索树并形成新的树,来源于网上资料。

  • 相关阅读:
    jdk git maven Jenkins的配置
    jar包部署脚本
    Mybaits和Spring的那点事
    HashMap三两事
    排序算法学习
    MySQL杂谈
    一个最简单的微服务架构
    SpringBoot全家桶
    nginx上传
    使用xshell在linux服务器上部署node项目
  • 原文地址:https://www.cnblogs.com/wqing/p/12965295.html
Copyright © 2020-2023  润新知