我正在尝试在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);
}
}