Estou criando um aplicativo usando meteor.js e MongoDB e tenho uma pergunta sobre cursor.forEach (). Desejo verificar algumas condições no início de cada iteração forEach e, em seguida, pular o elemento, se não for necessário executar a operação para economizar tempo.
Aqui está o meu código:
// 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();
}
});
Eu sei que eu poderia transformar o cursor em array usando cursor.find (). Fetch () e, em seguida, use o loop for regular para iterar sobre os elementos e usar continue e quebre normalmente, mas estou interessado se houver algo semelhante a ser usado no forEach ( )
fonte
return false;
seja o equivalente abreak;
(como é para um.each()
loop jQuery ). É claro que quem implementado MongoDB de.forEach()
ter tido outras idéias ...some
, apenas esteja ciente de que está usando indevidamente (ou usando criativamente) uma função destinada a dizer se algum dos elementos corresponde à condição. Mais ou menos como quando vejo as pessoas usammap
e ignorar o resultado (que deveria ter usadoforEach)
É semântica, as pessoas vão ter que olhar duas vezes para saber por que você está usando.some
Quando você realmente não se preocupam com o resultadoreturn true
que vai quebrar a algum laçoNa minha opinião, a melhor abordagem para conseguir isso usando o
filter
método pois não faz sentido retornar em umforEach
bloco; para um exemplo no seu snippet:Isso limitará o seu
elementsCollection
e manterá apenas osfiltred
elementos que devem ser processados.fonte
filter
e o segundo noforEach
se uma grande coleção, será muito ineficienteO(2n)
que pode ser consideradaO(n)
.right
maneira de fazê-lo..filter()
método, portanto, você deve chamar o.toArray()
método antes de poder.filter()
Aqui está uma solução usando
for of
e emcontinue
vez deforEach
:Isso pode ser um pouco mais útil se você precisar usar funções assíncronas dentro de seu loop que não funcionem dentro
forEach
. Por exemplo:fonte
Fazendo uso da avaliação de curto-circuito JavaScripts . Se
el.shouldBeProcessed
retornar verdadeiro,doSomeLengthyOperation
fonte