Ich erstelle eine App mit meteor.js und MongoDB und habe eine Frage zu cursor.forEach (). Ich möchte zu Beginn jeder Iteration einige Bedingungen überprüfen und dann das Element überspringen, wenn ich die Operation nicht ausführen muss, um Zeit zu sparen.
Hier ist mein Code:
// Fetch all objects in SomeElements collection
var elementsCollection = SomeElements.find();
elementsCollection.forEach(function(element){
if (element.shouldBeProcessed == false){
// Here I would like to continue to the next element if this one
// doesn't have to be processed
}else{
// This part should be avoided if not neccessary
doSomeLengthyOperation();
}
});
Ich weiß, dass ich den Cursor mit cursor.find (). Fetch () in ein Array verwandeln und dann die reguläre for-Schleife verwenden kann, um über Elemente zu iterieren und normal fortzufahren und zu brechen, aber ich bin interessiert, ob es etwas Ähnliches gibt, das in forEach (verwendet werden kann) ).
quelle
return false;
dies dem entsprichtbreak;
(wie bei einer jQuery-.each()
Schleife). Natürlich kann jeder, der.forEach()
some
, aber seien Sie sich bewusst, dass Sie eine Funktion missbrauchen (oder kreativ verwenden), mit der festgestellt werden soll, ob eines der Elemente der Bedingung entspricht. Ein bisschen wie wenn ich sehe, wie Leutemap
das Ergebnis verwenden und ignorieren (sie hätten es verwenden sollenforEach)
. Es ist Semantik, die Leute müssen zweimal hinschauen, um zu wissen, warum Sie es verwenden,some
wenn Sie sich nicht wirklich für das Ergebnis interessierenreturn true
was die einige Schleife brechen wirdMeiner Meinung nach ist dies der beste Ansatz, um dies mithilfe der
filter
Methode zu erreichen , da es bedeutungslos ist, in einemforEach
Block zurückzukehren. Ein Beispiel für Ihr Snippet:Dies wird Ihre eingrenzen
elementsCollection
und nur diefiltred
Elemente behalten , die verarbeitet werden sollen.quelle
filter
und die zweite in der,forEach
wenn es sich um eine große Sammlung handelt, wird es sehr ineffizient seinO(2n)
kannO(n)
.right
Weg, es zu tun..filter()
Methode hat. Sie.toArray()
.filter()
Hier ist eine Lösung mit
for of
undcontinue
anstelle vonforEach
:Dies kann etwas nützlicher sein, wenn Sie in Ihrer Schleife asynchrone Funktionen verwenden müssen, die in Ihrer Schleife nicht funktionieren
forEach
. Zum Beispiel:quelle
Verwendung der Kurzschlussauswertung von JavaScripts . Wenn
el.shouldBeProcessed
true zurückgegeben wird,doSomeLengthyOperation
quelle