Як "продовжити" всередині кожного циклу: підкреслення, node.js


80

Код у node.js досить простий.

_.each(users, function(u, index) {
  if (u.superUser === false) {
    //return false would break
    //continue?
  }
  //Some code
});

Моє питання полягає в тому, як я можу перейти до наступного індексу, не виконуючи "Деякий код", якщо для superUser встановлено значення false?

PS: Я знаю, що інша умова вирішить проблему. Все ще цікаво знати відповідь.

Відповіді:


137
_.each(users, function(u, index) {
  if (u.superUser === false) {
    return;
    //this does not break. _.each will always run
    //the iterator function for the entire array
    //return value from the iterator is ignored
  }
  //Some code
});

Зверніть увагу, що за допомогою lodash (а не підкреслення), _.forEachякщо ви дійсно хочете закінчити "цикл" достроково, ви можете явно return falseвикористати функцію ітерації, і lodash завершить forEachцикл достроково.


Чому це не застосовується? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Con Antonakos

6
Тому що _.eachі звичайний for () {}цикл - це не одне і те ж.
Пітер Лайонс

@ConAntonakos Коли ви використовуєте for-each(collection, callback)в JS, там немає жодного циклу for, callbackотже break/continue, не застосовуються.
pgpb.padilla

12

Замість continueоператора у циклі for ви можете використовувати returnоператор _.each()in innderscore.js, який пропустить лише поточну ітерацію.


0
_.each(users, function(u, index) {
  if (u.superUser) {
    //Some code
  }
});

Вибачте. Я повинен був детально описати сценарій. Мені потрібно виконати якийсь код, якщо суперкористувач хибний, а потім продовжити. Буде інша умова, скажімо, якщо (superUser! = False && активировано), для якої мені потрібно зробити щось інше і виконати "Деякий код", а потім є ще щось, для чого мені потрібно виконати "Деякий код". Я просто хотів знати, чи є спосіб це зробити, не переписуючи один і той же код всередині інакше, як і ще. Я не хочу створювати для цього іншу функцію.

1
Він запитував, як уникнути цієї дуже поганої практики використання стрілочного коду.
Девід Бетц,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.