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"){returnfalse;// breaks}});// or
$(selector).each(function(){if(condition){returnfalse;}});
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.
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.
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;returnfalse;}});if(breakOut){
breakOut =false;returnfalse;}
"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.
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){returntrue;}}}
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;returnfalse;//This will only exit the anonymous function and stop the iteration immediatelly.}});return result;//This will exit the function with return true;}
return false
en el lugar equivocado. Cuando lo arreglé todo funcionó.return false
que no funciona$().each
, porque lo hace.Respuestas:
Para
break
un bucle$.each
o$(selector).each
, debe regresarfalse
en la devolución de llamada del bucle.Volver
true
saltos a la siguiente iteración, equivalente a acontinue
en un bucle normal.fuente
false
de llamada de retorno en bucle"? ¿Dónde es exactamente esto?$.each(array, function(key, value) { if(value == "foo") return false; });
$().each
se realiza exactamente de la misma manera, su edición solo sirve para causar confusión.De acuerdo con la documentación
return false;
debe hacer el trabajo.Devuelve falso en la devolución de llamada:
Por cierto,
continue
funciona así:fuente
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/
fuente
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ó.
fuente
"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.
fuente
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.
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.
fuente