私はmeteor.jsとMongoDBを使ってアプリを作成しています。cursor.forEach()について質問があります。それぞれのforEach反復の始めにいくつかの条件をチェックし、それから操作を行う必要がない場合は要素をスキップして時間を節約することができます。
これが私のコードです:
// 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();
}
});
Cursor.find()。fetch()を使用してカーソルを配列に変換してから、通常のforループを使用して要素を繰り返し、通常はcontinueとbreakを使用することができますが、forEach( ).
forEach()
を繰り返すたびに、指定した関数が呼び出されます。与えられた反復内でそれ以上の処理をやめる(そして次の項目に進む)には、適切な時点で関数からreturn
を実行するだけです。
elementsCollection.forEach(function(element){
if (!element.shouldBeProcessed)
return; // stop processing this iteration
// This part will be avoided if not neccessary
doSomeLengthyOperation();
});
私の意見では、filter
ブロックで返すのは意味がないので、forEach
メソッド を使用してこれを達成するための最善の方法です。あなたのスニペットの例としては:
// Fetch all objects in SomeElements collection
var elementsCollection = SomeElements.find();
elementsCollection
.filter(function(element) {
return element.shouldBeProcessed;
})
.forEach(function(element){
doSomeLengthyOperation();
});
これはあなたのelementsCollection
を絞り込み、処理すべきfiltred
要素をそのままにしておきます。
JavaScriptを利用する 短絡 評価。 el.shouldBeProcessed
がtrueを返す場合、doSomeLengthyOperation
elementsCollection.forEach( el =>
el.shouldBeProcessed && doSomeLengthyOperation()
);