Как перейти к следующей итерации в утилите jQuery.each ()? - PullRequest
417 голосов
/ 27 января 2009

Я пытаюсь перебрать массив элементов. Документация jQuery гласит:

jquery.Each () документация

Возвращение non-false - это то же самое, что и оператор continue в цикле for, он будет сразу пропущен до следующей итерации.

Я пытался вызвать 'return non-false;' и «не ложь»; (без возврата), ни один из которых не пропускается к следующей итерации. Вместо этого они разрывают петлю. Чего мне не хватает?

Ответы [ 6 ]

762 голосов
/ 27 января 2009

Что они подразумевают под ненастоящим:

return true;

Итак, этот код:

var arr = [ "one", "two", "three", "four", "five" ];
$.each(arr, function(i) {
    if(arr[i] == 'three') {
        return true;
    }
    alert(arr[i]);
});

Оповещает один, два, четыре, пять

60 голосов
/ 27 января 2009

Под «возвращать не ложь» они подразумевают возвращение любого значения, которое не сработает, до логического значения «ложь». Таким образом, вы можете вернуть true, 1, 'non-false' или что-нибудь еще, что можете придумать.

5 голосов
/ 27 января 2009

В Javascript есть идея «правдивости» и «ложности». Если переменная имеет значение, то, как правило, 9, как вы увидите), она имеет «истинность» - ноль, или никакое значение не стремится к «ложности». Следующие фрагменты могут помочь:

var temp1; 
if ( temp1 )...  // false

var temp2 = true;
if ( temp2 )...  // true

var temp3 = "";
if ( temp3 ).... // false

var temp4 = "hello world";
if ( temp4 )...  // true

Надеюсь, это поможет?

Кроме того, стоит проверить эти видео от Дугласа Крокфорда

обновление: спасибо @cphpython за обнаружение неработающих ссылок - я обновился, чтобы теперь указывать на рабочие версии

Язык Javascript

Javascript - The Good Parts

3 голосов
/ 30 июля 2013

Не забывайте, что иногда вы можете просто упасть с конца блока, чтобы перейти к следующей итерации:

$(".row").each( function() {
    if ( ! leaveTheLoop ) {
        ... do stuff here ...
    }
});

Вместо того, чтобы возвращаться вот так:

$(".row").each( function() {
    if ( leaveTheLoop ) 
        return; //go to next iteration in .each()
    ... do stuff here ...
});
2 голосов
/ 24 сентября 2016

Цикл только прерывается, если вы возвращаетесь буквально false. Пример:

// this is how jquery calls your function
// notice hard comparison (===) against false
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
   break;
}

Это означает, что вы можете вернуть что-нибудь еще, включая undefined, то есть то, что вы возвращаете, если ничего не возвращаете, поэтому вы можете просто использовать пустой оператор return:

$.each(collection, function (index, item) {
   if (!someTestCondition)
      return; // go to next iteration

   // otherwise do something
});

Возможно, это может варьироваться в зависимости от версии; это применимо для jquery 1.12.4. Но на самом деле, когда вы выходите из нижней части функции, вы также ничего не возвращаете, и поэтому цикл продолжается, поэтому я ожидаю, что нет никакой возможности, что возврат ничего не мог бы не продолжить цикл , Если они не хотят заставить всех начать что-то возвращать, чтобы поддерживать цикл, то ничего не возвращая имеет , способ поддерживать это.

0 голосов
/ 22 августа 2016

jQuery.noop () может помочь

$(".row").each( function() {
    if (skipIteration) {
        $.noop()
    }
    else{doSomething}
});
...