«Продолжить» в cursor.forEach ()

133

Я создаю приложение, использующее 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
meteor

2 ответа

300
Лучший ответ

Каждая итерация forEach() вызывает функцию, которую вы предоставили. Чтобы остановить дальнейшую обработку в любой заданной итерации (и продолжить со следующего пункта), вам нужно только return от функции в соответствующей точке:

elementsCollection.forEach(function(element){
  if (!element.shouldBeProcessed)
    return; // stop processing this iteration

  // This part will be avoided if not neccessary
  doSomeLengthyOperation();
});
  • 15
    Знаете ли вы, может быть, что может быть "перерывом", тогда если продолжить это просто "возврат";
  • 4
    Я не использую MongoDB, поэтому не читал его документацию, но возможно, что return false; будет эквивалентом break; (как и для .each() jQuery .each() ). Конечно, кто бы ни реализовывал .forEach() MongoDB, у .forEach() могли быть другие идеи ...
Показать ещё 5 комментариев
3

На мой взгляд, лучший подход к этому достигается с помощью метода filter

  • 0
    Это будет повторять найденные элементы дважды, один раз в filter и второй в forEach если это большая коллекция, это будет очень неэффективно
  • 0
    Вы правы, но я не думаю, что это имеет большое значение, поскольку временная сложность этого будет O(2n) который можно рассматривать как O(n) .
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню