Cómo salir de jQuery cada bucle


¿Cómo salgo de un bucle jQuery each?

He intentado:

 return false;

En el bucle, pero esto no funcionó. Alguna idea?

ACTUALIZAR Aunque no está claro cuál era el alcance original de la pregunta, tenga en cuenta que la respuesta elegida solo cubre la función $.each() pero no la $().each.

 494
Author: Alex R, 2009-11-23

6 answers

A break a $.each loop, tienes que devolver false en la devolución de llamada del bucle.

Volviendo true salta a la siguiente iteración, equivalente a un continue en un bucle normal.

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

Romper un bucle $().each está cubierto en ¿Cómo romper/salir de una función each() en jQuery?

 894
Author: CMS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-28 23:55:39

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

, podemos romper el $.cada() loop [..] haciendo la función de devolución de llamada devuelve false.

Devuelve false 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, continue funciona así:

Devolver non-false es lo mismo que una instrucción continue en un bucle for; saltará inmediatamente a la siguiente iteración.

 52
Author: powtac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-14 12:28:32

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

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

Aquí hay un Violín que lo prueba:

Http://jsfiddle.net/9XqRy /

 32
Author: iamjpg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-08 01:15:15

Me encontré con la situación en la que me encontré con una condición que rompió el bucle, sin embargo, el código después de la .cada función () aún se ejecuta. Luego establezco una bandera en "true" con una comprobación inmediata de la bandera después de la .cada función () para asegurar que el código que siguió no fue ejecutado.

$('.groupName').each(function() {
    if($(this).text() == groupname){
        alert('This group already exists');
        breakOut = true;
        return false;
    }
});
if(breakOut) {
    breakOut = false;
    return false;
} 
 24
Author: David Aguirre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-24 23:10:32

"each" usa la función callback. La función Callback 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 callback.

Use for loop si tiene que detener la ejecución del bucle basado en alguna condición y permanecer en la misma función.

 8
Author: Sumit Jambhale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-25 05:58:23

Sé que es una pregunta bastante antigua, pero no vi ninguna respuesta, lo que aclara que 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 de jquery cada función, 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;
}
 0
Author: Vural Acar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-22 14:11:31