Cómo salir de jQuery cada bucle

677

¿Cómo salgo de un eachbucle jQuery ?

Yo he tratado:

 return false;

En el bucle pero esto no funcionó. ¿Algunas ideas?

Lucas101
fuente
11
Para la posteridad: ¿por qué el interrogador dijo que devolver falso no funcionó? Prácticamente cada respuesta dice hacer eso. Preguntándome si fue posiblemente porque eso solo termina cada ciclo. Una declaración de retorno dentro de un ciclo for, por el contrario, saldría del ciclo y de la función de llamada . Para obtener un comportamiento tan drástico de cada uno de los bucles, necesitará establecer una bandera con un alcance de cierre dentro de cada bucle, y luego responder a la bandera fuera de él.
Bob Stein
8
@ BobStein-VisiBone Alguien eliminó mi comentario original. Puse el return falseen el lugar equivocado. Cuando lo arreglé todo funcionó.
Luke101
1
No estoy seguro de por qué la "actualización" dice return falseque no funciona $().each, porque lo hace.
billynoah
2
@ Luke101 debe actualizar la pregunta para dejar en claro lo que no estaba funcionando. Este Q / A no tiene sentido cuando su pregunta dice que la respuesta aceptada no funciona.
xr280xr

Respuestas:

1183

Para breakun bucle $.eacho $(selector).each, debe regresar falseen la devolución de llamada del bucle.

Volver truesaltos a la siguiente iteración, equivalente a a continueen un bucle normal.

$.each(array, function(key, value) { 
    if(value === "foo") {
        return false; // breaks
    }
});

// or

$(selector).each(function() {
  if (condition) {
    return false;
  }
});
CMS
fuente
3
Justo lo que estaba buscando, gracias. @OZZIE, solo usa "return true"; o "devolver falso"; según sus condiciones.
dchayka
2
¿Qué significa @CMS con "devolución falsede llamada de retorno en bucle"? ¿Dónde es exactamente esto?
mesqueeb
Por ejemplo$.each(array, function(key, value) { if(value == "foo") return false; });
SteveEdson el
1
No sé jQuery tuvo que intercambiar posiciones de parámetros desde javascript por cada uno.
Mikee
1
@AlexR Salir de un $().eachse realiza exactamente de la misma manera, su edición solo sirve para causar confusión.
Jake
57

De acuerdo con la documentación return false;debe hacer el trabajo.

Podemos romper el bucle $ .each () [..] haciendo que la función de devolución de llamada devuelva falso.

Devuelve falso en la devolución de llamada:

function callback(indexInArray, valueOfElement) {
  var booleanKeepGoing;

  this; // == valueOfElement (casted to Object)

  return booleanKeepGoing; // optional, unless false 
                           // and want to stop looping
}

Por cierto, continuefunciona así:

Devolver no falso es lo mismo que una instrucción continue en un ciclo for; saltará inmediatamente a la siguiente iteración.

Powtac
fuente
35

Creé un Fiddle para la respuesta a esta pregunta porque la respuesta aceptada es incorrecta y además este es el primer hilo de StackOverflow devuelto por Google con respecto a esta pregunta.

Para salir de $ .cada uno debe usar return false;

Aquí hay un violín que lo demuestra:

http://jsfiddle.net/9XqRy/

iamjpg
fuente
14
Me gusta el violín, pero no estoy seguro de por qué dice que la respuesta aceptada es incorrecta, porque ambos dicen lo mismo.
gitsitgo
34

Encontré la situación en la que encontré una condición que rompió el ciclo, sin embargo, el código después de la función .each () aún se ejecutó. Luego establecí un indicador en "verdadero" con una comprobación inmediata del indicador después de la función .each () para asegurar que el código que siguió no se ejecutó.

$('.groupName').each(function() {
    if($(this).text() == groupname){
        alert('This group already exists');
        breakOut = true;
        return false;
    }
});
if(breakOut) {
    breakOut = false;
    return false;
} 
David Aguirre
fuente
7

"cada" usa la función de devolución de llamada. La función de devolución de llamada se ejecuta independientemente de la función de llamada, por lo que no es posible volver a la función de llamada desde la función de devolución de llamada.

use for loop si tiene que detener la ejecución del ciclo según alguna condición y permanecer en la misma función.

Sumit Jambhale
fuente
6

Sé que es una pregunta bastante antigua, pero no vi ninguna respuesta, lo que aclara por qué y cuándo es posible romper con el retorno.

Me gustaría explicarlo con 2 ejemplos simples:

1. Ejemplo: en este caso, tenemos una iteración simple y queremos romper con return true, si podemos encontrar los tres.

function canFindThree() {
    for(var i = 0; i < 5; i++) {
        if(i === 3) {
           return true;
        }
    }
}

Si llamamos a esta función, simplemente devolverá el verdadero.

2. Ejemplo En este caso, queremos iterar con cada función de jquery , que toma la función anónima como parámetro.

function canFindThree() {

    var result = false;

    $.each([1, 2, 3, 4, 5], function(key, value) { 
        if(value === 3) {
            result = true;
            return false; //This will only exit the anonymous function and stop the iteration immediatelly.
        }
    });

    return result; //This will exit the function with return true;
}
Vural
fuente