Szukam sposobu na zatrzymanie iteracji _.each()
metody underscore.js , ale nie mogę znaleźć rozwiązania. jQuery .each()
może się zepsuć, jeśli to zrobisz return false
.
Czy istnieje sposób, aby zatrzymać podkreślenie każdego ()?
_([1,2,3]).each(function(v){
if (v==2) return /*what?*/;
})
forEach
funkcja natywna również nie oferuje tej funkcji.each
zamknięcia (w większości języków), najpierw musisz przefiltrować listę. W ten sposób nie musisz się martwić o zerwanie z tym. Ogólnie rzecz biorąc, jeśli musisz wcześnie przerwać iterację, prawdopodobnie jest inny sposób, aby to zrobić.each
zamknięcia) jest podobne do JavaScript.Array.every
do naśladowania pożądanego zachowania.Odpowiedzi:
Nie można zerwać z
each
metodą - emuluje onaforEach
zachowanie metody natywnej, a metoda natywnaforEach
nie zapewnia możliwości ucieczki z pętli (poza zgłaszaniem wyjątku).Jednak cała nadzieja nie jest stracona! Możesz użyć tej
Array.every
metody. :)Z tego linku:
Innymi słowy, możesz zrobić coś tak skomplikowanego jak ten ( link do JSFiddle ):
Będzie to ostrzegać
1
przez3
, a następnie „break” poza pętli.Używasz underscore.js, więc będziesz zadowolony, aby dowiedzieć się, że nie zapewniają
every
metody-nazywają goevery
, ale jak linkujące wspomina, zapewniają również alias o nazwieall
.źródło
_.every()
nie ma_.all()
metody ani tablic, więc trzymaj sięArray.every()
.every
. Uważaj więc na czytelność._.each()
mają notatkę konkretnie o tym, że nie można wyjść z pętli, i zalecamy użycie_.find()
zamiast tego. http://underscorejs.org/#eachAktualizacja:
_.find byłby lepszy, ponieważ wyłamuje się z pętli po znalezieniu elementu:
** stary **
Jeśli chcesz warunkowo wyjść z pętli, użyj _.filter api zamiast _.each. Oto fragment kodu
źródło
_.find
wykonuje dokładnie to, co jest wymagane: iteruje listę, aż do powrotutrue
.Możesz zajrzeć
_.some
zamiast_.each
._.some
przestaje przeglądać listę, gdy predykat jest prawdziwy. Wyniki można zapisać w zmiennej zewnętrznej.Zobacz http://underscorejs.org/#some
źródło
źródło
Być może potrzebujesz znaku podkreślenia any () lub find (), który przestanie przetwarzać, gdy zostanie spełniony warunek.
źródło
Podobnie jak inne odpowiedzi, jest to niemożliwe. Oto komentarz na temat przerywnika w numerze podkreślenia nr 21
źródło
Nie można złamać
forEach
znaku podkreślenia, ponieważ emuluje on natywne zachowanie EcmaScript 5.źródło
Wierzę, że jeśli twoja tablica była w rzeczywistości obiektem, możesz zwrócić za pomocą pustego obiektu.
źródło
http://underscorejs.org/#each
źródło
Aktualizacja:
Możesz faktycznie „złamać”, wrzucając błąd do środka i łapiąc go na zewnątrz: coś takiego:
Ma to oczywiście pewne implikacje dotyczące wszelkich innych wyjątków, które kod wyzwala w pętli, więc używaj go ostrożnie!
źródło
pracował w moim przypadku
źródło