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ź.


źródło

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.

Peter Lyons
źródło
Dlaczego to nie dotyczy? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Con Antonakos
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ę.

Vishnu PS
źródło
0
_.each(users, function(u, index) {
  if (u.superUser) {
    //Some code
  }
});
pdoherty926
źródło
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