Javascript 为什么不是';我的递归函数是否返回最终结果?
我有一个方法递归遍历嵌套对象,直到找到匹配的文件夹名称:Javascript 为什么不是';我的递归函数是否返回最终结果?,javascript,node.js,object,Javascript,Node.js,Object,我有一个方法递归遍历嵌套对象,直到找到匹配的文件夹名称: findSpecifiedFolder(data) { const bookmarks = JSON.parse(data).roots.bookmark_bar.children; const search = bookmarks => { for(let folder of bookmarks) { const folderName = folder.name.toLowe
findSpecifiedFolder(data) {
const bookmarks = JSON.parse(data).roots.bookmark_bar.children;
const search = bookmarks => {
for(let folder of bookmarks) {
const folderName = folder.name.toLowerCase();
if(folderName === folderArg.toLowerCase()) {
console.log(folder); // returns folder object
return folder // never returns anything
}
else if(folder.children) {
search(folder.children);
}
}
};
search(bookmarks);
}
因此,通过使用console.log
和我的调试器,我可以看到以下内容:
console.log
语句和调试器中的数据执行if(folderName===folderArg.toLowerCase())
时,我可以确认我确实进行了成功的检查但是,return语句没有被执行(通过调试器确认),并且该方法返回undefined(或者当我被另一个带有错误日志的方法调用时出错)。我不知道为什么,我在这里问,是否有人会看到我缺少的方法中存在错误。您必须返回递归调用,否则在解决所有递归调用后,返回的值将不会被委派并返回:
else if(folder.children) {
return search(folder.children);
}
一个简单的概念证明是斐波那契序列。以下是一些伪代码(不返回):
因此,如果我调用fib(2)
,它将经历以下执行步骤:
fib(1)
fib(2)
0+1
else 1
是一个表达式(1
部分),不做任何操作由于没有
返回值
,因此将计算最终结果,但您对其不做任何操作,函数将返回未定义的结果。你必须归还它。同样的原则也适用于此。您必须返回递归调用,否则在解析所有递归调用时,返回的值将不会被委派并返回:
else if(folder.children) {
return search(folder.children);
}
一个简单的概念证明是斐波那契序列。以下是一些伪代码(不返回):
因此,如果我调用fib(2)
,它将经历以下执行步骤:
fib(1)
fib(2)
0+1
else 1
是一个表达式(1
部分),不做任何操作由于没有
返回值
,因此将计算最终结果,但您对其不做任何操作,函数将返回未定义的结果。你必须归还它。同样的原理也适用于这里。这是可行的,通过你的fib示例,我现在明白了它的工作原理-感谢你的解释@没问题,很乐意帮忙!这是有效的,以你的小谎为例,我现在明白它为什么有效了——谢谢你的解释@没问题,很乐意帮忙!