You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归查找Google Drive文件夹时无法退出While循环并返回目标文件夹的问题

递归查找Google Drive文件夹时无法退出While循环并返回目标文件夹的问题

嗨,我来帮你梳理下这个问题~ 你的代码思路是对的,但递归调用的返回值没被正确处理,导致就算子层级找到了目标文件夹,当前的while循环还是会继续执行,上层函数也接收不到这个结果,自然没法正确返回啦。

咱们来调整下代码,核心是要捕获递归调用的返回值,一旦找到目标就立刻终止整个递归链:

function buscarCarpeta(origen, curso) {
  var cursoStr = curso.toString();
  var folders = origen.getFolders();
  
  while (folders.hasNext()) {
    var folder = folders.next();
    var name = folder.getName();
    
    // 先检查当前文件夹是否匹配目标字符串
    if (name.includes(cursoStr)) { // 用includes比search更直观,功能一致
      Logger.log("Encontrado: " + name);
      return folder;
    }
    
    // 递归查找子文件夹,并捕获返回结果
    var foundFolder = buscarCarpeta(folder, cursoStr);
    // 如果子递归找到了文件夹,立刻返回,终止后续循环
    if (foundFolder) {
      return foundFolder;
    }
  }
  
  // 如果当前层级和所有子层级都没找到,返回null表示无结果
  return null;
}

关键改动说明:

  1. 捕获递归返回值:把递归调用的结果存在foundFolder变量里,一旦这个变量有值(也就是找到了目标),直接返回它,这样就能跳出当前的while循环,同时把结果传递给上层调用。
  2. 简化匹配逻辑:用includes()替代search(),代码可读性更强,同样能判断文件夹名称是否包含目标字符串。
  3. 明确无结果返回:遍历完所有文件夹都没找到时返回null,方便调用方判断是否查找成功。

修改后,只要在任意层级找到目标文件夹,整个递归链会立刻终止,并且把找到的文件夹对象返回给最初的调用者,不会再做无效的循环啦。

备注:内容来源于stack exchange,提问作者Mario Moreno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:13:06