Gar*_*hby 397 javascript loops break nested-loops
在Javascript中打破嵌套循环的最佳方法是什么?
//Write the links to the page.
for (var x = 0; x < Args.length; x++)
{
for (var Heading in Navigation.Headings)
{
for (var Item in Navigation.Headings[Heading])
{
if (Args[x] == Navigation.Headings[Heading][Item].Name)
{
document.write("<a href=\""
+ Navigation.Headings[Heading][Item].URL + "\">"
+ Navigation.Headings[Heading][Item].Name + "</a> : ");
break; // <---HERE, I need to break out of two loops.
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
eph*_*ent 927
就像Perl一样
loop1:
for (var i in set1) {
loop2:
for (var j in set2) {
loop3:
for (var k in set3) {
break loop2; // breaks out of loop3 and loop2
}
}
}
Run Code Online (Sandbox Code Playgroud)
如EMCA-262第12.12节中的定义.[MDN Docs]
与C不同,这些标签只能用于continue和break,因为Javascript没有goto.
swi*_*ams 156
将其包裹在一个函数中然后只是return.
ale*_*emb 82
我有点迟到了,但以下是与语言无关的方法,不使用GOTO /标签或功能包装:
for (var x = Set1.length; x > 0; x--)
{
for (var y = Set2.length; y > 0; y--)
{
for (var z = Set3.length; z > 0; z--)
{
z = y = -1; // terminates second loop
// z = y = x = -1; // terminate first loop
}
}
}
Run Code Online (Sandbox Code Playgroud)
在好的方面,它自然流动,这应该取悦非GOTO人群.在缺点方面,内部循环需要在终止之前完成当前迭代,因此在某些情况下可能不适用.
zor*_*ord 70
我意识到这是一个非常古老的话题,但由于我的标准方法还没有到来,我想我会把它发布给未来的googlers.
var a, b, abort = false;
for (a = 0; a < 10 && !abort; a++) {
for (b = 0; b < 10 && !abort; b++) {
if (condition) {
doSomeThing();
abort = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
har*_*333 40
var str = "";
for (var x = 0; x < 3; x++) {
(function() { // here's an anonymous function
for (var y = 0; y < 3; y++) {
for (var z = 0; z < 3; z++) {
// you have access to 'x' because of closures
str += "x=" + x + " y=" + y + " z=" + z + "<br />";
if (x == z && z == 2) {
return;
}
}
}
})(); // here, you execute your anonymous function
}
Run Code Online (Sandbox Code Playgroud)
怎么样?:)
小智 36
非常简单
var a=[1,2,3];
var b=[4,5,6];
var breakCheck1=false;
for (var i in a){
for (var j in b){
breakCheck1=true;
break;
}
if (breakCheck1) {break;}
}
Run Code Online (Sandbox Code Playgroud)
Dra*_*kes 14
如何完全不使用中断,没有中止标志,也没有额外的条件检查.这个版本只是Number.MAX_VALUE在满足条件时抛出循环变量(使它们)并强制所有循环优雅地终止.
// No breaks needed
for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (condition) {
console.log("condition met");
i = j = Number.MAX_VALUE; // Blast the loop variables
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于递减类型的嵌套循环,有一个类似的答案,但是这适用于递增类型的嵌套循环,而不需要考虑简单循环的每个循环的终止值.
另一个例子:
// No breaks needed
for (var i = 0; i < 89; i++) {
for (var j = 0; j < 1002; j++) {
for (var k = 0; k < 16; k++) {
for (var l = 0; l < 2382; l++) {
if (condition) {
console.log("condition met");
i = j = k = l = Number.MAX_VALUE; // Blast the loop variables
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*ray 13
以下是打破JavaScript中的嵌套循环的五种方法:
1)将父循环设置为结尾
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
{
i = 5;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
2)使用标签
exit_loops:
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
break exit_loops;
}
}
Run Code Online (Sandbox Code Playgroud)
3)使用变量
var exit_loops = false;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
{
exit_loops = true;
break;
}
}
if (exit_loops)
break;
}
Run Code Online (Sandbox Code Playgroud)
4)使用自我执行功能
(function()
{
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
return;
}
}
})();
Run Code Online (Sandbox Code Playgroud)
5)使用常规功能
function nested_loops()
{
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
return;
}
}
}
nested_loops();
Run Code Online (Sandbox Code Playgroud)
如何将循环推到最终限制
for(var a=0; a<data_a.length; a++){
for(var b=0; b<data_b.length; b++){
for(var c=0; c<data_c.length; c++){
for(var d=0; d<data_d.length; d++){
a = data_a.length;
b = data_b.length;
c = data_b.length;
d = data_d.length;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)