Búsqueda de sitios web

¿Cómo romper bucles anidados en JavaScript?


Intenté esto:

for(i = 0; i < 5; i++){
    for(j = i + 1; j < 5; j++){
        break(2);
    }
    alert(1);
}

solo para obtener:

SyntaxError: falta ; antes de la declaración

Entonces, ¿cómo rompería un bucle anidado en JavaScript?

Respuesta #1

Deberías poder hacer un salto a una etiqueta, así:

function foo () {
    dance:
    for (var k = 0; k < 4; k++) {
        for (var m = 0; m < 4; m++) {
            if (m == 2) {
                break dance;
            }
        }
    }
}

Respuesta #2

Necesitas nombrar tu bucle exterior y salir de ese bucle, en lugar de tu bucle interior, así.

outer_loop: 
for(i=0;i<5;i++) {
    for(j=i+1;j<5;j++) {
        break outer_loop;
    }
    alert(1);
}

Respuesta #3

Hay al menos cinco formas diferentes de salir de dos o más bucles:

1) Establecer bucle(s) del padre al final

for (i = 0; i < 5; i++)
{
    for (j = 0; j < 5; j++)
    {
        if (j === 2)
        {
            i = 5;
            break;
        }
    }
}

2) Usar etiqueta

fast:
for (i = 0; i < 5; i++)
{
    for (j = 0; j < 5; j++)
    {
        if (j === 2)
            break fast;
    }
}

3) Usar variable

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;
}

4) Usar función autoejecutable

(function()
{
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
             if (j === 2)
                 return;
        }
    }
})();

5) Usar función regular

function nested_loops()
{
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
             if (j === 2)
                 return;
        }
    }
}
nested_loops();

Respuesta #4

Vea el de Aaron. De lo contrario: j=5;i=5 en lugar de break.

Respuesta #5

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
            }
        }
    }

código copiado de la Mejor manera de salir de bucles anidados en Javascript?

Por favor, busque antes de publicar una pregunta. ¡El enlace fue la PRIMERA pregunta relacionada que vi en el lado izquierdo de esta página!

Respuesta #6

Desafortunadamente, tendrás que establecer una bandera o usar etiquetas (piensa en las antiguas declaraciones goto)

var breakout = false;

for(i=0;i<5;i++)
{
    for(j=i+1;j<5;j++)
    {
        breakout = true;
        break;
    }
    if (breakout) break;
    alert(1)
};

El enfoque de la etiqueta se ve así:

end_loops:
for(i=0;i<5;i++)
{
    for(j=i+1;j<5;j++)
    {
        break end_loops;
    }
    alert(1)
};

editar: etiqueta colocada incorrectamente.

ver también:

  • http://www.devguru.com/Technologies/ecmascript/quickref/break.html
  • http://www.daaq.net/old/javascript/index.php?page=js+exiting+loops&parent=js+statements

Artículos relacionados