每次迭代都不会调用递归函数

时间:2017-06-27 22:53:42

标签: jquery

我正在尝试在J Query中实现递归函数。递归函数只返回一个对象,而不是返回一系列对象,这是我预期结果的第一个元素(这使得我暗示它只进行一次递归调用)。

 //recursive function to find every Base Child 
 function GetBaseChild(node)
 {
    if(node.hasOwnProperty("children")){
        for(var i = 0; i < node.children.length; i++){
           return GetBaseChild(node.children[i]);
         }
     }else{
        return node;
     }
 }

我假设我的fall循环中的返回,阻止我的循环进入下一个索引并执行递归调用,因此单个调用。知道我该怎么做。

我尝试了什么

之后,我添加了额外的逻辑来测试我在循环中的位置,或者返回函数,如图所示。

//recursive function to find every Base Child 
function GetBaseChild(node)
{
    if(node.hasOwnProperty("children")){
        for(var i = 0; i < node.children.length; i++){
            if(i < node.children.length -1){
                  GetBaseChild(node.children[i]);
               }else{
                  return GetBaseChild(node.children[i]);
               }
        }
    }else{
        return node;
    }
}

现在该函数返回我预期结果的最后一个元素。它应该返回一系列结果。那么我怎样才能实现这一点。

解决方案

浏览互联网并阅读一些资源后,我意识到J Query有一些局限性。我的问题是由于当我使用return时控件突破循环并返回第一个/最后一个结果,这取决于我使用的逻辑。并且考虑到J Query将非原始类型作为引用传递的事实,我决定传递一个数组,我的递归函数将在我的代码中操作并使用它。这是源代码。

//recursive function to find every Base Child 
function GetBaseChild(array, node)
{
    if(node.hasOwnProperty("children")){
        for(var i = 0; i < node.children.length; i++){
            GetBaseChild(array, node.children[i]);
        }
    }else{
        array.push(node);
    }
}

0 个答案:

没有答案