gpt4 book ai didi

javascript - 递归 JavaScript 在第一次传递后返回

转载 作者:行者123 更新时间:2023-11-28 10:59:02 26 4
gpt4 key购买 nike

我有以下递归 javascript 函数,该函数在backbone.marionette CollectionView 的子级上循环,该子级 ItemView 又是 CollectionView:

  findViewByCid: function(cid, children){
var col = (arguments.length === 1) ? this.children : children;

if(cid in col){
return col[cid];
}

for(child in col){
var grandChildren = col[child].children;

if(cid in grandChildren){
return grandChildren[cid];
}

if(grandChildren && (!jQuery.isEmptyObject(grandChildren))){
return this.findViewByCid(cid, grandChildren);
}
}
}

我这样调用它:

var view = DocumentManager.Documents.treeRoot.findViewByCid(model.cid);

问题出在这行:

return this.findViewByCid(cid, grandChildren);

如果我有这样的层次结构

c1
|_c2
|_c3
|_c4
|_c5

那么 return 语句将导致函数在传递 th3 c2 节点后退出,并且永远不会到达 c4 等。

如果我删除 return 语句,则会找到正确的子项,但会返回 null。

如何继续解析层次结构并返回值?

最佳答案

返回将退出您的函数

尝试将所有内容保存在 var 中,并在最后返回,如果需要返回多个值,可以是数组。(并且不要在 for 循环中声明变量!)

这是一个建议:

findViewByCid: function(cid, children){
var willBeReturned=[];
var grandChildren;

var col = (arguments.length === 1) ? this.children : children;

if(cid in col){
willBeReturned[willBeReturned.length] = col[cid];
}
for(child in col){
grandChildren = col[child].children;

if(cid in grandChildren){
willBeReturned[willBeReturned.length] = grandChildren[cid];
}

if(grandChildren && (!jQuery.isEmptyObject(grandChildren))){
willBeReturned[willBeReturned.length] = this.findViewByCid(cid, grandChildren);
}
}
return willBeReturned;
}

关于javascript - 递归 JavaScript 在第一次传递后返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12055818/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com