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
}
 
注意:
1、当有多条数据需要实现通过code查找label的时候,最好不要使用for循环,用find循环来代替,但是以上方法并不能真是实现树形查找,因为some依然无法终止循环,使用try catch(){}来终止循环,并使用for in来循环。
2、关于select下拉框回显的问题:当指定数据与下拉框中的对应数据类型不一致时,不能够正常回显,例如:默认传递的数据的字段id的类型是string型,但是下拉框中的数组对象的id类型是num型,此时就要将id的类型转化为一致的才可以正常回显。
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;
  }