zoukankan      html  css  js  c++  java
  • 根据搜索值返回新的树(Vue版)


    帮同事解决的需求,根据搜索值返回有搜索值的树结构

    searchTreeData (originTreeData, searchValue) {
          if (!searchValue) {
            this.$set(this, 'dataDepartSet', originTreeData);
            return;
          }
          const treeData = JSON.parse(JSON.stringify(originTreeData));
          const searhTree = Array.from({ length: treeData.length });
          function changeTreeBySearch (data, key) {
            data.forEach((e, index) => {
              const treeIndex = key ? `${key}-${index}` : String(index);
              if (~e.title.indexOf(searchValue)) {
                const indexs = treeIndex.split('-');
                let count = 0;
                changeSearchTree(searhTree, treeData);
                function changeSearchTree (item, originItem) {
                  const searchIndex = indexs[count];
                  console.log(item, originItem, indexs, searchIndex, 8787);
                  if (!item[searchIndex]) {
                    item[searchIndex] = {
                      title: originItem[searchIndex].title,
                      expand: true
                    };
                    if (originItem[searchIndex].children) {
                      item[searchIndex].children = Array.from({ length: originItem[searchIndex].children.length });
                    }
                  }
                  ++count;
                  if (item[searchIndex].children && item[searchIndex].children.length && indexs.length > count) {
                    changeSearchTree(item[searchIndex].children, originItem[searchIndex].children);
                  }
                }
              }
              e.children && changeTreeBySearch(e.children, treeIndex);
            });
          }
          changeTreeBySearch(treeData);
          function dfsClearUndefined (data, key) {
            for (let i = data.length - 1; i >= 0; --i) {
              if (!data[i]) {
                data.splice(i, 1);
              } else {
                data[i].children && dfsClearUndefined(data[i].children);
              }
            }
          }
          dfsClearUndefined(searhTree);
          this.$set(this, 'dataDepartSet', JSON.parse(JSON.stringify(searhTree)));
        }
    

    面试深信服写的搜索树

    function filter (tree, str) {
      const newTree = [];
      tree.forEach(val => {
        if (~val.name.indexOf(str)) {
          newTree.push(val)
        } else {
         const children = filter(val.children || [], str)
         if (children.length) {
           newTree.push({ ...val, children })
         }
        }
      }) 
      return newTree;
    }
    
  • 相关阅读:
    Mybaits的10种通用的写法
    你清楚这几个Spring常用注解吗?
    面试时如何介绍自己
    Spring加载加密的配置文件
    MySQL主从复制
    CentOS7安装和配置MySQL
    Druid监控页面配置与使用
    Shiro配置URL过滤
    基于注解的Dubbo服务配置
    Java中常用的加密算法小结
  • 原文地址:https://www.cnblogs.com/smallZoro/p/13414432.html
Copyright © 2011-2022 走看看