Pour la postérité: pourquoi le questionneur a-t-il dit que le retour de faux n'a pas fonctionné? Presque toutes les réponses disent de le faire. Vous vous demandez si c'est peut-être parce que cela ne termine que la boucle each. Une instruction return à l'intérieur d'une boucle for, en revanche, quitterait la boucle et la fonction appelante . Pour obtenir un tel comportement drastique d'une boucle each, vous devez définir un indicateur avec une portée de fermeture à l'intérieur de chaque boucle, puis répondre à l'indicateur en dehors.
Bob Stein
8
@ BobStein-VisiBone Quelqu'un a supprimé mon commentaire d'origine. J'ai mis le return falsemauvais endroit. Quand je l'ai réparé, tout fonctionnait.
Luke101
1
Je ne sais pas pourquoi la "mise à jour" indique que return falsecela ne fonctionne pas $().each- car c'est le cas.
billynoah
2
@ Luke101, vous devez mettre à jour la question pour clarifier ce qui ne fonctionnait pas. Ce Q / R n'a aucun sens lorsque votre question dit que la réponse acceptée ne fonctionne pas.
xr280xr
Réponses:
1183
Pour breakune boucle $.eachor $(selector).each, vous devez retourner falsedans la boucle de rappel.
Le retour truepasse à l'itération suivante, équivalant à un continuedans une boucle normale.
$.each(array,function(key,value){if(value==="foo"){returnfalse;// breaks}});// or
$(selector).each(function(){if(condition){returnfalse;}});
Nous pouvons rompre la boucle $ .each () [..] en renvoyant false la fonction de rappel.
Retourne faux dans le rappel:
function callback(indexInArray, valueOfElement){var booleanKeepGoing;this;// == valueOfElement (casted to Object)return booleanKeepGoing;// optional, unless false // and want to stop looping}
BTW, continuefonctionne comme ceci:
Renvoyer une valeur non fausse équivaut à une instruction continue dans une boucle for; il sautera immédiatement à la prochaine itération.
J'ai créé un violon pour la réponse à cette question car la réponse acceptée est incorrecte et c'est le premier thread StackOverflow renvoyé par Google concernant cette question.
Pour sortir d'un $ .each, vous devez utiliser return false;
J'aime le violon, mais je ne sais pas pourquoi vous dites que la réponse acceptée est incorrecte, parce que vous dites tous les deux la même chose.
gitsitgo
34
Je suis tombé sur la situation où j'ai rencontré une condition qui a rompu la boucle, mais le code après la fonction .each () était toujours exécuté. J'ai ensuite défini un indicateur sur "true" avec une vérification immédiate de l'indicateur après la fonction .each () pour m'assurer que le code qui a suivi n'a pas été exécuté.
$('.groupName').each(function(){if($(this).text()== groupname){
alert('This group already exists');
breakOut =true;returnfalse;}});if(breakOut){
breakOut =false;returnfalse;}
"each" utilise la fonction de rappel. La fonction de rappel s'exécute indépendamment de la fonction appelante, il n'est donc pas possible de revenir à la fonction appelante à partir de la fonction de rappel.
utilisez for loop si vous devez arrêter l'exécution de la boucle en fonction d'une condition et rester dans la même fonction.
Je sais que c'est une question assez ancienne mais je n'ai vu aucune réponse, qui précise que pourquoi et quand il est possible de rompre avec le retour.
Je voudrais l'expliquer avec 2 exemples simples:
1. Exemple: Dans ce cas, nous avons une itération simple et nous voulons rompre avec return true, si nous pouvons trouver les trois.
function canFindThree(){for(var i =0; i <5; i++){if(i ===3){returntrue;}}}
si nous appelons cette fonction, elle retournera simplement le vrai.
2. Exemple Dans ce cas, nous voulons itérer avec chaque fonction de jquery , qui prend une fonction anonyme comme paramètre.
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
mauvais endroit. Quand je l'ai réparé, tout fonctionnait.return false
cela ne fonctionne pas$().each
- car c'est le cas.Réponses:
Pour
break
une boucle$.each
or$(selector).each
, vous devez retournerfalse
dans la boucle de rappel.Le retour
true
passe à l'itération suivante, équivalant à uncontinue
dans une boucle normale.la source
false
dans la boucle de retour "? Où est-ce exactement?$.each(array, function(key, value) { if(value == "foo") return false; });
$().each
se fait exactement de la même manière, votre édition ne sert qu'à semer la confusion.Selon la documentation
return false;
devrait faire le travail.Retourne faux dans le rappel:
BTW,
continue
fonctionne comme ceci:la source
J'ai créé un violon pour la réponse à cette question car la réponse acceptée est incorrecte et c'est le premier thread StackOverflow renvoyé par Google concernant cette question.
Pour sortir d'un $ .each, vous devez utiliser
return false;
Voici un violon qui le prouve:
http://jsfiddle.net/9XqRy/
la source
Je suis tombé sur la situation où j'ai rencontré une condition qui a rompu la boucle, mais le code après la fonction .each () était toujours exécuté. J'ai ensuite défini un indicateur sur "true" avec une vérification immédiate de l'indicateur après la fonction .each () pour m'assurer que le code qui a suivi n'a pas été exécuté.
la source
"each" utilise la fonction de rappel. La fonction de rappel s'exécute indépendamment de la fonction appelante, il n'est donc pas possible de revenir à la fonction appelante à partir de la fonction de rappel.
utilisez for loop si vous devez arrêter l'exécution de la boucle en fonction d'une condition et rester dans la même fonction.
la source
Je sais que c'est une question assez ancienne mais je n'ai vu aucune réponse, qui précise que pourquoi et quand il est possible de rompre avec le retour.
Je voudrais l'expliquer avec 2 exemples simples:
1. Exemple: Dans ce cas, nous avons une itération simple et nous voulons rompre avec return true, si nous pouvons trouver les trois.
si nous appelons cette fonction, elle retournera simplement le vrai.
2. Exemple Dans ce cas, nous voulons itérer avec chaque fonction de jquery , qui prend une fonction anonyme comme paramètre.
la source