Je crée une application en utilisant meteor.js et MongoDB et j'ai une question à propos de cursor.forEach (). Je veux vérifier certaines conditions au début de chaque itération forEach, puis ignorer l'élément si je n'ai pas à effectuer l'opération dessus afin de gagner du temps.
Voici mon 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();
}
});
Je sais que je pourrais transformer le curseur en tableau à l'aide de curs.find (). ).
javascript
mongodb
foreach
meteor
Drag0
la source
la source
return false;
ce soit l'équivalent debreak;
(comme c'est le cas pour une.each()
boucle jQuery ). Bien sûr, celui qui a implémenté MongoDB.forEach()
peut avoir eu d'autres idées ...some
, sachez simplement que vous utilisez à mauvais escient (ou utilisez de manière créative) une fonction qui était destinée à déterminer si l'un des éléments correspond à la condition. Un peu comme quand je vois des gens utilisermap
et ignorer le résultat (ils auraient dû utiliserforEach)
. C'est de la sémantique, les gens devront regarder deux fois pour savoir pourquoi vous utilisezsome
quand vous ne vous souciez pas vraiment du résultatreturn true
ce qui rompra la boucleÀ mon avis, la meilleure approche pour y parvenir en utilisant la
filter
méthode car cela n'a aucun sens de revenir dans unforEach
bloc; pour un exemple sur votre extrait:Cela affinera votre
elementsCollection
et ne conservera que lesfiltred
éléments à traiter.la source
filter
seconde et la seconde dans leforEach
cas s'il s'agit d'une grande collection, elle sera très inefficaceO(2n)
être considérée commeO(n)
.right
façon de le faire..filter()
méthode, vous devez donc appeler sa.toArray()
méthode avant de pouvoir.filter()
Voici une solution utilisant
for of
etcontinue
au lieu deforEach
:Cela peut être un peu plus utile si vous devez utiliser des fonctions asynchrones dans votre boucle qui ne fonctionnent pas à l'intérieur
forEach
. Par exemple:la source
Utilisation de l' évaluation des courts-circuits JavaScripts . Si
el.shouldBeProcessed
renvoie vrai,doSomeLengthyOperation
la source