Я создаю приложение, использующее 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 для итерации по элементам и использовать продолжение и прерывание нормально, но мне интересно, если есть что-то похожее на использование in 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
если это большая коллекция, это будет очень неэффективно
O(2n)
который можно рассматривать как O(n)
.
return false;
будет эквивалентомbreak;
(как и для.each()
jQuery.each()
). Конечно, кто бы ни реализовывал.forEach()
MongoDB, у.forEach()
могли быть другие идеи ...