422 Stimmen

"weiter" in cursor.forEach()

Ich baue eine App mit meteor.js und MongoDB und habe eine Frage zu cursor.forEach(). Ich möchte einige Bedingungen am Anfang jeder Iteration von forEach überprüfen und dann das Element überspringen, wenn ich die Operation nicht durchführen muss, um Zeit zu sparen.

Hier ist mein Code:

// Alle Objekte in der SomeElements Sammlung abrufen
var elementsCollection = SomeElements.find();
elementsCollection.forEach(function(element){
  if (element.shouldBeProcessed == false){
    // Hier würde ich gerne zum nächsten Element weitergehen, wenn dieses nicht bearbeitet werden muss
  }else{
    // Dieser Teil sollte vermieden werden, wenn nicht notwendig
    doSomeLengthyOperation();
  }
});

Ich weiß, dass ich den Cursor in ein Array umwandeln und dann eine normale for-Schleife verwenden könnte, um über die Elemente zu iterieren und continue und break normal zu verwenden, aber ich interessiere mich dafür, ob es etwas Ähnliches gibt, das in forEach() verwendet werden kann.

3voto

A.Muqtadir Punkte 31

// Es gibt zwei Möglichkeiten.

//1. Verwendung der 'return'-Anweisung mit einer if-Bedingung

 elementsCollection.forEach(function(element){
  if (element.shouldBeProcessed == false){
    return; // Verwenden Sie diese return-Anweisung, um zu überspringen
  }else{
    // Dieser Teil sollte vermieden werden, wenn nicht notwendig
    doSomeLengthyOperation();
  }
});

//2. Wenn Sie den Hauptvorteil der Verwendung funktionaler Muster nutzen möchten. filtern Sie vor der Anwendung von forEach

    elementsCollection.filter(v => v.shouldBeProcessed == true).forEach(v => {
   doSomeLengthyOperation();// alle Iterationen mit "shouldBeProcessed ==false" werden übersprungen
});

0voto

GorvGoyl Punkte 32029

Wenn Sie eine klassische for-Schleife verwenden und continue nicht verwenden möchten, können Sie eine selbstausführende Funktion darin verwenden und return verwenden, um das Verhalten von continue zu imitieren:

for (let i = 0; i < 10; i++) {
    (() => {
        if (i > 5) return;
        console.log("Nr.", i)
    })();
}

console.log("Schleife beendet")

Ausgabe:

[LOG]: "Nr.",  0 
[LOG]: "Nr.",  1 
[LOG]: "Nr.",  2 
[LOG]: "Nr.",  3 
[LOG]: "Nr.",  4 
[LOG]: "Nr.",  5 
[LOG]: "Schleife beendet"

-6voto

Verwenden Sie die continue-Anweisung anstelle von return, um eine Iteration in JS-Schleifen zu überspringen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X