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
和我的调试器,我可以看到以下内容:

  • 实际上,该方法递归地搜索给定对象,嵌套深度至少为3级
  • 当通过
    console.log
    语句和调试器中的数据执行
    if(folderName===folderArg.toLowerCase())
    时,我可以确认我确实进行了成功的检查

  • 但是,return语句没有被执行(通过调试器确认),并且该方法返回undefined(或者当我被另一个带有错误日志的方法调用时出错)。我不知道为什么,我在这里问,是否有人会看到我缺少的方法中存在错误。

    您必须返回递归调用,否则在解决所有递归调用后,返回的值将不会被委派并返回:

    else if(folder.children) {
        return search(folder.children);
    }
    
    一个简单的概念证明是斐波那契序列。以下是一些伪代码(不返回):

    因此,如果我调用
    fib(2)
    ,它将经历以下执行步骤:

  • 去别的地方
  • 呼叫
    fib(1)
  • 返回0
  • 呼叫
    fib(2)
  • 返回1
  • 添加
    0+1
  • 那就什么也不做。代码基本上是
    else 1
    是一个表达式(
    1
    部分),不做任何操作

  • 由于没有
    返回值
    ,因此将计算最终结果,但您对其不做任何操作,函数将返回未定义的结果。你必须归还它。同样的原则也适用于此。

    您必须返回递归调用,否则在解析所有递归调用时,返回的值将不会被委派并返回:

    else if(folder.children) {
        return search(folder.children);
    }
    
    一个简单的概念证明是斐波那契序列。以下是一些伪代码(不返回):

    因此,如果我调用
    fib(2)
    ,它将经历以下执行步骤:

  • 去别的地方
  • 呼叫
    fib(1)
  • 返回0
  • 呼叫
    fib(2)
  • 返回1
  • 添加
    0+1
  • 那就什么也不做。代码基本上是
    else 1
    是一个表达式(
    1
    部分),不做任何操作

  • 由于没有
    返回值
    ,因此将计算最终结果,但您对其不做任何操作,函数将返回未定义的结果。你必须归还它。同样的原理也适用于这里。

    这是可行的,通过你的fib示例,我现在明白了它的工作原理-感谢你的解释@没问题,很乐意帮忙!这是有效的,以你的小谎为例,我现在明白它为什么有效了——谢谢你的解释@没问题,很乐意帮忙!