Jak „kontynuować” wewnątrz każdej pętli: podkreślenie, node.js


80

Kod w node.js jest dość prosty.

_.each(users, function(u, index) {
  if (u.superUser === false) {
    //return false would break
    //continue?
  }
  //Some code
});

Moje pytanie brzmi: jak mogę przejść do następnego indeksu bez wykonywania „jakiegoś kodu”, jeśli superUser jest ustawiony na false?

PS: Wiem, że inny warunek rozwiązałby problem. Wciąż ciekawi mnie odpowiedź.

Odpowiedzi:


137
_.each(users, function(u, index) {
  if (u.superUser === false) {
    return;
    //this does not break. _.each will always run
    //the iterator function for the entire array
    //return value from the iterator is ignored
  }
  //Some code
});

Zauważ na marginesie, że z lodash (bez podkreślenia), _.forEachjeśli chcesz zakończyć „pętlę” wcześniej, możesz jawnie skorzystać return falsez funkcji iteratee, a lodash zakończy forEachpętlę wcześniej.



6
Ponieważ _.eachi zwykła for () {}pętla to nie to samo.
Peter Lyons

@ConAntonakos Kiedy używasz for-each(collection, callback)w JS, nie ma wewnątrz pętli for, callbackwięc break/continuenie stosuj.
pgpb.padilla

12

Zamiast continueinstrukcji w pętli for możesz użyć returninstrukcji _.each()w underscore.js, pominie ona tylko bieżącą iterację.


0
_.each(users, function(u, index) {
  if (u.superUser) {
    //Some code
  }
});

Przepraszam. Powinienem był szczegółowo przedstawić scenariusz. Muszę wykonać kod, jeśli super user jest fałszywy, a następnie kontynuować. Pojawi się inny warunek, powiedz, jeśli (superUser! = False && active), dla którego muszę zrobić coś innego i wykonać „Jakiś kod”, a potem jest jeszcze coś, dla którego muszę wykonać „Jakiś kod”. Chciałem tylko wiedzieć, czy można to zrobić bez przepisywania tego samego kodu w obu else if i else. Nie chcę do tego tworzyć innej funkcji.

1
Pytał, jak uniknąć tej bardzo złej praktyki kodowania strzałkami.
David Betz
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.