Je cherche un moyen d'arrêter les itérations de la _.each()
méthode underscore.js , mais je ne trouve pas la solution. jQuery .each()
peut se casser si vous le faites return false
.
Existe-t-il un moyen d'arrêter le trait de soulignement each ()?
_([1,2,3]).each(function(v){
if (v==2) return /*what?*/;
})
forEach
fonction native n'offre pas non plus cette fonctionnalité.each
avec une fermeture (dans la plupart des langues), vous souhaitez d'abord filtrer votre liste. De cette façon, vous n'avez pas à vous soucier d'en rompre. De manière générale, si vous devez interrompre tôt une itération, il existe probablement une manière différente de procéder.each
fermeture) est similaire à JavaScript.Array.every
pour émuler le comportement que vous souhaitez.Réponses:
Vous ne pouvez pas rompre avec la
each
méthode: elle émule leforEach
comportement de la méthode native et le natifforEach
ne fournit pas d'échapper à la boucle (à l'exception de lever une exception).Cependant, tout espoir n'est pas perdu! Vous pouvez utiliser la
Array.every
méthode. :)À partir de ce lien:
En d'autres termes, vous pourriez faire quelque chose de compliqué comme ça ( lien vers JSFiddle ):
Cela alertera
1
par3
, puis « casser » hors de la boucle.Vous utilisez underscore.js, vous serez heureux d'apprendre qu'il ne fournit un
every
ce méthode qu'ils appellentevery
, mais comme ce lien mentionne, ils fournissent également un aliasall
.la source
_.every()
ni_.all()
méthode ni méthode pour les tableaux en trait de soulignement - alors respectez leArray.every()
.every
. Faites donc attention à la lisibilité._.each()
contient une note spécifique sur le fait que vous ne pouvez pas sortir de la boucle et vous recommande d'utiliser à la_.find()
place. http://underscorejs.org/#eachMettre à jour:
_.find serait mieux car il sort de la boucle lorsque l'élément est trouvé:
** Vieux **
Si vous souhaitez rompre conditionnellement une boucle, utilisez _.filter api au lieu de _.each. Voici un extrait de code
la source
_.find
fait exactement ce qui est demandé: parcourir la liste jusqu'au retour du rappeltrue
.Vous pouvez jeter un œil à la
_.some
place de_.each
._.some
arrête de parcourir la liste une fois qu'un prédicat est vrai. Les résultats peuvent être stockés dans une variable externe.Voir http://underscorejs.org/#some
la source
la source
Peut-être que vous voulez utiliser Underscore any () ou find (), qui arrêtera le traitement lorsqu'une condition est remplie.
la source
Comme les autres réponses, c'est impossible. Voici le commentaire sur le disjoncteur dans le numéro de soulignement de soulignement n ° 21
la source
Vous ne pouvez pas casser un
forEach
trait de soulignement, car il émule le comportement natif EcmaScript 5.la source
Je crois que si votre tableau était en fait un objet, vous pourriez retourner en utilisant un objet vide.
la source
http://underscorejs.org/#each
la source
Mettre à jour:
Vous pouvez réellement "casser" en lançant une erreur à l'intérieur et en l'attrapant à l'extérieur: quelque chose comme ceci:
Cela a évidemment des implications concernant toutes les autres exceptions que votre code déclenche dans la boucle, alors utilisez-les avec prudence!
la source
travaillé dans mon cas
la source