• 树形数据结构递归,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;
      }
  • 相关阅读:
    Codeforces Round #499 (Div. 2) C.FLY 数学推导_逆推
    Codeforces div2 #499 B. Planning The Expedition 大水题
    Lost Cows POJ
    洛谷P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows 状压动归
    2018.9.30 ~ 2018.11.1 做题记录
    推荐一款强大的轻量级模块化WEB前端快速开发框架--UIkit
    jQuery Validate多实例讲解
    关于Css的垂直居中的一些方法
    关于浮动与清除浮动,你应该知道的
    使用 Vuex + Vue.js 构建单页应用
  • 原文地址:https://www.cnblogs.com/panzai/p/15760127.html
Copyright © 2020-2023  润新知