Подтвердить что ты не робот

Javascript, выходящий за цикл без возврата

У меня есть цикл, который я хочу выйти; например:

function MyFunction() {

  for (var i = 0; i < SomeCondition; i++) {

     if (i === SomeOtherCondition) {

        // Do some work here
        return false;
     }
  }

  SomeOtherFunction();
  SomeOtherFunction2();
}

Проблема заключается в том, что после выполнения операторов Do some work here я хочу выйти из цикла for, но все равно выполнить SomeOtherFunctions();

Возвращаемый false оператор завершает цикл for, но также выходит из всей функции. Как это исправить?

Спасибо.

4b9b3361

Ответ 1

Вы ищете инструкцию break.

Ответ 2

Использовать оператор break или continue

function MyFunction() { 
  for (var i = 0; i < SomeCondition; i++) { 

     if (i === SomeOtherCondition) { 

        // Do some work here 
        break;
     } 
  } 

  SomeOtherFunction(); 
  SomeOtherFunction2(); 
} 

Или продолжить обработку элементов, за исключением тех, которые находятся в состоянии

function MyFunction() { 
  for (var i = 0; i < SomeCondition; i++) { 

     if (i != SomeOtherCondition) continue;

     // Do some work here 
  } 

  SomeOtherFunction(); 
  SomeOtherFunction2(); 
} 

Ответ 3

Несколько человек предложили break в качестве решения, и это действительно лучший ответ на вопрос.

Однако для полноты я также должен добавить, что на вопрос можно ответить, сохраняя инструкцию return, путем обертывания содержимого условия if() в функции закрытия:

function MyFunction() {

  for (var i = 0; i < SomeCondition; i++) {

     if (i === SomeOtherCondition) {
        function() {
           // Do some work here
           return false;
        }();
     }
  }

  SomeOtherFunction();
  SomeOtherFunction2();
}

Как я уже сказал, break, вероятно, является лучшим решением в этом случае, так как прямой ответ на вопрос и замыкание вводит некоторые дополнительные факторы (например, изменение значения this, ограничение объема переменные, введенные внутри функции и т.д.). Но это стоит того, чтобы предлагать в качестве решения, потому что это ценная техника для изучения, если не обязательно ее использовать в этом конкретном случае, то, безусловно, в будущем.

Ответ 4

Break - разбивает весь цикл. Продолжить - пропустить шаг в цикле. Поэтому он пропускает код ниже,

Ответ 5

Будет ли хороший параметр переменной я соответствовать значению somecondition?

for (var i=0; i<SomeCondition; i++) {

   if (data[i]===true) {
   //do stuff
   i=SomeCondition;
   }
}

Ответ 6

ОК, может быть, это старая тема, но после прочтения всех ответов мне интересно, почему никто не предложил использовать цикл while?

Я думаю, что в JavaScript вы можете разбить цикл for (который вы не можете делать на многих других языках или считаетесь плохой практикой), но я все равно буду использовать для циклов только для ситуаций, когда вы хотите итерации цикла фиксированное количество раз.

Это было бы моим предложением:

function MyFunction() {

  var i = 0,
      breakLoop = false;

  while (i < SomeCondition && !breakLoop) {

     if (i === SomeOtherCondition) {
        breakLoop = true;
     }

     i++;

  }

  SomeOtherFunction();
  SomeOtherFunction2();

}