从 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,因此相应更新。
我有一个函数用于递归一系列嵌套的树节点状对象。根据控制台输出,我可以看出当前正在访问所有节点。这是函数:
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,因此相应更新。