Есть ли в jQuery или JavaScript следующий оператор / функция для перехода к следующей итерации цикла?

#javascript #jquery #loops #next

#javascript #jquery #циклы #Далее

Вопрос:

У меня есть этот код, где я хотел бы, чтобы next переход к следующей итерации выполнялся.

 $.each(result, function(key, value) {

    if (value.type == "individuel") {
    cform["IN"] = "checked";
    } else if (value.type == "course") {
    cform["CO"] = "checked";
    } else {

    next;

    }

    cform["ID"]     = key;
    cform["title"]  = value.title;

    $('#template').tmpl(cform).appendTo('#content');
});
  

Но next очевидно, означает нечто отличное от того, что я ожидал.

Мне кажется, что next завершается $.each , а не пропускается текущий ключ / значение.

Существует ли способ сделать next так, как я ожидал?

Комментарии:

1. next это не ключевое слово или зарезервированное слово в Javascript, поэтому, если оно не было где-то определено как переменная, включение next в ваш код должно вызывать ReferenceError

Ответ №1:

Из-за природы jQuery невозможно указать «next» в теле функции. Внутренняя функция не знает, что она выполняется в цикле, и поэтому не может повлиять на этот факт.

Но вы можете вернуться раньше, что приведет к тому же эффекту:

 $.each(result, function(key, value) {
  if (value.type == "individuel") {
    cform["IN"] = "checked";
  } else if (value.type == "course") {
    cform["CO"] = "checked";
  } else {
    return true;
  } 

  cform["ID"]     = key;
  cform["title"]  = value.title;
  $('#template').tmpl(cform).appendTo('#content');
});
  

Я нахожу это более стильным:

 $.each(result, function(key, value) {
  switch (value.type) {
    case "individuel": cform["IN"] = "checked"; break;
    case "course":     cform["CO"] = "checked"; break; 
    default: return true;
  }

  cform["ID"]     = key;
  cform["title"]  = value.title;
  $('#template').tmpl(cform).appendTo('#content');
});
  

Комментарии:

1. Будьте осторожны, это return false прерывает весь цикл и приводит к короткому замыканию.

Ответ №2:

В отличие от других конструкций, таких как for..in и while , $.each не является языковой конструкцией. С помощью этих конструкций вы можете использовать continue , чтобы пропустить текущий элемент и break выйти из цикла. Поскольку $.each принимает функцию обратного вызова, вам нужно использовать return значение обратного вызова, чтобы повлиять на то, что произойдет дальше.

Возврат true для перехода к следующему элементу; возврат false для прерывания цикла.

В этом случае вам следует использовать return true :

 else {
   return true; // skip to next element
}
  

Ответ №3:

возвращает true;

Из документов:

Мы можем прервать цикл $.each() на определенной итерации, заставив функцию обратного вызова возвращать значение false . Возврат значения, отличного от false, аналогичен оператору continue в цикле for; он немедленно перейдет к следующей итерации.

jQuery.each

Ответ №4:

Использование оператора if делает следующий ненужным. Просто делайте все, что хотите, в if и игнорируйте else. Итерация выполняется автоматически.

Комментарии:

1. Не будет ли у меня тогда один и тот же код дважды? Ie. последние 3 строки кода будут в каждом if -операторе. Это упрощенный пример. Там еще примерно на 20 строк кода больше.

2. Вам нужно будет настроить свой оператор if в соответствии с вашими целями. При каких условиях вам нужно выполнить 20 строк кода? Затем установите это условие и запустите их, затем разбейте на более конкретные случаи.

Ответ №5:

Используйте continue; для перехода к следующей итерации в цикле.

Редактировать: Да, извините за это, клянусь, я видел там цикл: ( Вы можете «продолжить» в jQuery each(), вернув значение, отличное от false, будет ли возврат работать в вашем случае?

Комментарии:

1. Я отредактировал свой ответ.. @Raynos, означает ли это, что я не могу использовать continue в while 🙂