So fahren Sie in jeder Schleife fort: Unterstrich, node.js.


80

Der Code in node.js ist einfach genug.

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

Meine Frage ist, wie ich mit dem nächsten Index fortfahren kann, ohne "Some code" auszuführen, wenn superUser auf false gesetzt ist.

PS: Ich weiß, dass eine andere Bedingung das Problem lösen würde. Immer noch neugierig auf die Antwort.

Antworten:


136
_.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
});

Randnotiz: _.forEachWenn Sie mit lodash (ohne Unterstrich) die "Schleife" vorzeitig beenden möchten, können Sie dies explizit return falseüber die iteratee-Funktion tun, und lodash beendet die forEachSchleife vorzeitig.



6
Weil _.eachund eine reguläre for () {}Schleife nicht dasselbe sind.
Peter Lyons

@ConAntonakos Wenn Sie for-each(collection, callback)in JS verwenden, gibt es keine for-Schleife im Inneren, callbackdaher gilt break/continuedies nicht.
pgpb.padilla

12

Anstelle der continueAnweisung in for-Schleife können Sie die returnAnweisung _.each()in underscore.js verwenden. Dabei wird nur die aktuelle Iteration übersprungen.


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

Es tut uns leid. Ich hätte das Szenario ins Detail bringen sollen. Ich muss Code ausführen, wenn der Superuser falsch ist, und dann fortfahren. Es wird eine andere Bedingung geben, wenn (superUser! = False && aktiviert), für die ich etwas anderes tun und "Some code" ausführen muss, und dann gibt es noch eine andere, für die ich "Some code" ausführen muss. Ich wollte nur wissen, ob es eine Möglichkeit gibt, dies zu tun, ohne denselben Code in else if und else neu zu schreiben. Ich möchte dafür keine weitere Funktion erstellen.

1
Er fragte, wie man diese sehr schlechte Praxis des Pfeilcodes vermeiden könne.
David Betz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.