从 for 循环中包含的递归到 return 值的正确方法

Proper way to return value from recursion contained within for loop

我有一个函数用于递归一系列嵌套的树节点状对象。根据控制台输出,我可以看出当前正在访问所有节点。这是函数:

function directoryRecurse(dir, searchedPath) {
    for (var ii = 0; ii < dir.children.length; ii++) {
        if (dir.children[ii].path && dir.children[ii].path === searchedPath) {
            return dir.children[ii];
        } else {
            directoryRecurse(dir.children[ii], searchedPath);
        }
    }
}

但是,return 值始终是 undefined。我已经尝试修改函数,以便将 directoryRecurse(dir.children[ii], searchedPath) 替换为 return directoryRecurse(dir.children[ii], searchedPath),但在这种情况下,函数会在找到第一个叶节点后终止。如何确保所有节点都被访问并且最终 return 值是正在搜索的节点?[​​=15=]

所以 directoryRecurse returns 如果找到匹配项,则为目录,如果未找到匹配项,则为 'undefined' ...因此您需要检查递归调用中的哪个目录:

function directoryRecurse(dir, searchedPath) {
    for (var ii = 0; ii < dir.children.length; ii++) {
        if (dir.children[ii].path && dir.children[ii].path === searchedPath) {
            return dir.children[ii];
        } else {
            var result = directoryRecurse(dir.children[ii], searchedPath);
            if (typeof result != 'undefined') {
                return result;
            }
        }
    }
}

不确定 result !== undefined 的 Javascript 语法,所以任何知道的人都可以随时纠正。

更新:我认为这个答案 (How to check for "undefined" in JavaScript?) 建议对这种未定义的情况使用 typeof,因此相应更新。