Ich suche nach einer Möglichkeit, Iterationen der _.each()
Methode underscore.js zu stoppen , kann aber keine Lösung finden. jQuery .each()
kann brechen, wenn Sie dies tun return false
.
Gibt es eine Möglichkeit, die Unterstreichung jedes einzelnen () zu stoppen?
_([1,2,3]).each(function(v){
if (v==2) return /*what?*/;
})
forEach
Funktion diese Funktion ebenfalls nicht bietet.each
möchten Sie bei Verwendung mit einem Abschluss (in den meisten Sprachen) zuerst Ihre Liste filtern. Auf diese Weise müssen Sie sich keine Sorgen machen, dass Sie davon abbrechen. Wenn Sie eine Iteration frühzeitig abbrechen müssen, gibt es im Allgemeinen wahrscheinlich eine andere Möglichkeit, dies zu tun.each
Abschluss abzubrechen ) JavaScript ähnelt.Array.every
Sie das gewünschte Verhalten emulieren.Antworten:
Sie können nicht von der
each
Methode abbrechen - sie emuliert dasforEach
Verhalten der nativen Methode und die native MethodeforEach
bietet keine Möglichkeit, der Schleife zu entkommen (außer eine Ausnahme auszulösen).Es ist jedoch nicht alle Hoffnung verloren! Sie können die
Array.every
Methode verwenden. :) :)Von diesem Link:
Mit anderen Worten, Sie könnten so etwas tun ( Link zu JSFiddle ):
Dies wird
1
durch alarmieren3
und dann aus der Schleife "ausbrechen".Sie verwenden Underscore.js, so dass Sie zufrieden sein werden zu erfahren , dass es nicht ein bietet
every
verfahrens sie es nennenevery
, aber wie der Link erwähnt, sie bieten auch einen Aliasnamen genanntall
.quelle
_.every()
noch eine_.all()
Methode für Arrays mit Unterstrich. Halten Sie sich also an dieArray.every()
.every
. Achten Sie also auf die Lesbarkeit._.each()
einen Hinweis speziell auf die Tatsache, dass Sie nicht aus der Schleife ausbrechen können, und empfehlen die Verwendung_.find()
stattdessen. http://underscorejs.org/#eachAktualisieren:
_.find wäre besser, da es aus der Schleife ausbricht, wenn das Element gefunden wird:
** Alt **
Wenn Sie bedingt aus einer Schleife ausbrechen möchten, verwenden Sie _.filter api anstelle von _.each. Hier ist ein Code-Snippet
quelle
_.find
macht genau das, was gefragt wird: iteriere durch die Liste, bis der Rückruf zurückkehrttrue
.Sie können
_.some
stattdessen einen Blick darauf werfen_.each
._.some
stoppt das Durchlaufen der Liste, sobald ein Prädikat wahr ist. Ergebnis (e) können in einer externen Variablen gespeichert werden.Siehe http://underscorejs.org/#some
quelle
quelle
Vielleicht möchten Sie unterstriches any () oder find (), das die Verarbeitung beendet, wenn eine Bedingung erfüllt ist.
quelle
Wie die anderen Antworten ist es unmöglich. Hier ist der Kommentar zu Breaker in Unterstrich- Unterstrich-Problem Nr. 21
quelle
Sie können einen
forEach
Unterstrich nicht unterbrechen, da er das native Verhalten von EcmaScript 5 emuliert.quelle
Ich glaube, wenn Ihr Array tatsächlich ein Objekt wäre, könnten Sie es mit einem leeren Objekt zurückgeben.
quelle
http://underscorejs.org/#each
quelle
Aktualisieren:
Sie können tatsächlich "brechen", indem Sie einen Fehler nach innen werfen und nach außen abfangen: so etwas:
Dies hat offensichtlich einige Auswirkungen auf andere Ausnahmen, die Ihr Code in der Schleife auslöst. Gehen Sie also vorsichtig vor!
quelle
hat in meinem Fall funktioniert
quelle