Есть ли в JQuery или JavaScript следующий оператор / функция для перехода к следующей итерации цикла? - PullRequest
1 голос
/ 08 июня 2011

У меня есть этот код, где я хотел бы, чтобы 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, как я и ожидал?

Ответы [ 5 ]

7 голосов
/ 08 июня 2011

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

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

$.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');
});
6 голосов
/ 08 июня 2011

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

Вернуть true, чтобы перейти к следующему пункту; верните false чтобы разорвать петлю.

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

else {
   return true; // skip to next element
}
3 голосов
/ 08 июня 2011

return true;

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

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

jQuery.each

1 голос
/ 08 июня 2011

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

0 голосов
/ 08 июня 2011

Используйте continue;, чтобы перейти к следующей итерации в цикле.

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

...