【发布时间】:2016-11-17 06:12:26
【问题描述】:
我的问题是:如何通过被调用的函数触发break; 或continue; 循环?问题是,我不想将所有可能的条件嵌套在一个循环中以避免代码复杂性。我在想一些伪例子:
var someObjects = [...] //array with some js objects
for (var i = 0; i < someObjects.length; i++) {
var element = someObjects[i];
doSomething(element);
}
function doSomething(object) {
//some code here
if (somethingIsDefined) {
doSomethingElse(object);
}
}
function doSomethingElse(anotherObject) {
//some more code here
if (somethingMatches) {
//here i would like to break the most upper loop
}
}
//someObjects will be processed
我知道可以引入例如一个布尔变量并在循环中检查它是真还是假,并取决于它,break; 或 continue;。
但这 - 即使它只是一行 - 会增加嵌套。您看到任何可能的解决方案吗?
【问题讨论】:
-
您可以将全局布尔值设置为 false,在您的函数中将其设置为 true,并检查每次迭代是否布尔值为 true。
-
您可以尝试将迭代器移出for循环,当
somethingMatches时,将其设置为someObjects.length,以便它移出循环..(只是一个想法,从来没有这样做过) -
@AppleCrazy 没错,但正如我提到的那样,这会增加 for 循环中的嵌套。我知道我可以这样做,但我想问是否有办法避免嵌套。
-
@gkb 哦,很好的观察。我没有考虑到这一点。这实际上可以解决它。除此之外,如果函数不在同一个上下文或命名空间中,我必须将它作为参数传递。
-
是的,它需要是一个全局变量,但必须在该命名空间或上下文中..以避免将其作为参数发送..
标签: javascript performance code-complexity