Как перейти к следующей итерации в jQuery.each() util?

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

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

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

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

+336
26 янв. '09 в 22:14
источник поделиться
6 ответов

То, что они подразумевают под неверным, это:

return true;

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

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

Будет предупреждать один, два, четыре, пять

+630
26 янв. '09 в 22:16
источник

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

+56
26 янв. '09 в 22:18
источник

У Javascript есть идея "правды" и "фальшивости". Если переменная имеет значение, тогда, как правило, вы увидите, что она имеет "правду" - значение null, или никакое значение не стремится к "ложности". Ниже приведенные ниже фрагменты могут помочь:

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

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

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

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

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

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

Язык Javascript

Javascript - Хорошие детали

+5
26 янв. '09 в 23:27
источник

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

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

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

$(".row").each( function() {
    if ( leaveTheLoop ) 
        return; //go to next iteration in .each()
    ... do stuff here ...
});
+3
30 июл. '13 в 16:26
источник

Цикл только ломается, если вы вернетесь буквально 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
23 сент. '16 в 21:44
источник

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

$(".row").each( function() {
    if (skipIteration) {
        $.noop()
    }
    else{doSomething}
});
0
22 авг. '16 в 10:13
источник

Посмотрите другие вопросы по меткам или Задайте вопрос