递归查找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; }
关键改动说明:
- 捕获递归返回值:把递归调用的结果存在
foundFolder变量里,一旦这个变量有值(也就是找到了目标),直接返回它,这样就能跳出当前的while循环,同时把结果传递给上层调用。 - 简化匹配逻辑:用
includes()替代search(),代码可读性更强,同样能判断文件夹名称是否包含目标字符串。 - 明确无结果返回:遍历完所有文件夹都没找到时返回
null,方便调用方判断是否查找成功。
修改后,只要在任意层级找到目标文件夹,整个递归链会立刻终止,并且把找到的文件夹对象返回给最初的调用者,不会再做无效的循环啦。
备注:内容来源于stack exchange,提问作者Mario Moreno
相关产品推荐
相关产品推荐

