Estoy creando una aplicación usando meteor.js y MongoDB y tengo una pregunta sobre cursor.forEach (). Quiero verificar algunas condiciones al comienzo de cada iteración y luego omitir el elemento si no tengo que hacer la operación para poder ahorrar algo de tiempo.
Aquí está mi 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();
}
});
Sé que podría convertir el cursor en matriz usando cursor.find (). Fetch () y luego usar el ciclo for regular para iterar sobre los elementos y usar continue y break normalmente, pero estoy interesado si hay algo similar para usar en forEach ( )
fuente

return false;sea el equivalente debreak;(como lo es para un.each()bucle jQuery ). Por supuesto, quien implementó MongoDB.forEach()puede haber tenido otras ideas ...some, solo tenga en cuenta que está haciendo un mal uso (o está usando de manera creativa) una función que estaba destinada a determinar si alguno de los elementos coincide con la condición. Algo así como cuando veo que la gente usamape ignora el resultado (deberían haberlo usadoforEach). Es semántica, la gente tendrá que mirar dos veces para saber por qué estás usandosomecuando realmente no te importa el resultadoreturn truelo que romperá el círculoEn mi opinión, el mejor enfoque para lograr esto es usar el
filtermétodo ya que no tiene sentido regresar en unforEachbloque; para un ejemplo en tu fragmento:Esto reducirá su
elementsCollectiony solo mantendrá losfiltredelementos que deben procesarse.fuente
filtersegunda y la segundaforEachsi es una colección grande, será muy ineficienteO(2n)que se puede considerarO(n).rightforma de hacerlo..filter()método, por lo que debería llamar a su.toArray()método antes de poder.filter()Aquí hay una solución usando
for ofy encontinuelugar deforEach:Esto puede ser un poco más útil si necesita utilizar funciones asincrónicas dentro de su ciclo que no funcionan dentro
forEach. Por ejemplo:fuente
Haciendo uso de la evaluación de cortocircuito JavaScripts . Si
el.shouldBeProcesseddevuelve verdadero,doSomeLengthyOperationfuente