• 树形数据结构递归,forEach终止循环,for循环里面嵌套if语句执行顺序问题


    1、树形结构递归通过id找到对应label:

    export function findTreeItem(table, id, key = 'id') {
      let hasFound = false // 表示是否有找到id值
      let result = null
      const fn = function(data) {
        if (Array.isArray(data) && !hasFound) {
          console.log('是数组')
          // 判断是否是数组并且没有的情况下
        data.some(item => {    //使用some替换forEach,forEach无法终止循环
          if (data.find(item => item[key] == id)) {  //不能使用if item[key]==id),否则for循环执行完之后才能进入if语句。
            // 数据循环每个子项,并且判断子项下边是否有id值
           result = data.find(item => item[key] == id)  //find返回的是符合条件的数据,而不是true或者false
    // 返回的结果等于每一项
            console.log(result)
            hasFound = true // 并且找到id值
            return true  //跳出循环体,终止循环。
          } else if (item.children) {
            fn(item.children) // 递归调用下边的子项
          }
      })
         }  
      }
      fn(table) // 调用一下
      return result
    }
     
    注意:当有多条数据需要实现通过code查找label的时候,最好不要使用for循环,用find循环来代替,但是以上方法并不能真是实现树形查找,因为some依然无法终止循环,使用try catch(){}来终止循环,并使用for in来循环。
    export function getNode(data,id){
       console.log(data)
       console.log(id)
        let keyWord=id;
        let columnDefs=data;
        let res_name=''
         try{
          const findName=(columnDef)=>{
          if(columnDef.id==keyWord){
            console.log('相等')
          throw columnDef;
          }
         if(columnDef.children && columnDef.children.length>0){
            for(let i in columnDef.children){
            findName(columnDef.children[i]);
            }
             }
          }
         for(let i in columnDefs){
         findName(columnDefs[i])
       }
      }catch(name){
      res_name=name
      }
      return res_name;
      }

    export function getNode(data,id){
       console.log(data)
       console.log(id)
        let keyWord=id;
        let columnDefs=data;
        let res_name=''
         try{
          const findName=(columnDef)=>{
          if(columnDef.id==keyWord){
            console.log('相等')
          throw columnDef;
          }
         if(columnDef.children && columnDef.children.length>0){
            for(let i in columnDef.children){
            findName(columnDef.children[i]);
            }
             }
          }
         for(let i in columnDefs){
         findName(columnDefs[i])
       }
      }catch(name){
      res_name=name
      }
      return res_name;
      }
  • 相关阅读:
    深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
    sql之group by的用法
    jmeter参数化
    jmeter--FTP测试
    jmeter基础概念
    开源性能测试工具——jemeter介绍+安装说明
    mysql安装图解 mysql图文安装教程(详细说明)
    Elasticsearch全文检索优化研究
    如何正确的关闭Elasticsearch集群
    自定义查询系统架构设计分析
  • 原文地址:https://www.cnblogs.com/panzai/p/15760127.html
Copyright © 2020-2023  润新知