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

StackOverflow https://stackoverflow.com/questions/481601

  •  20-08-2019
  •  | 
  •  

Вопрос

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

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

Возврат неложного значения аналогичен оператору continue в цикле for: он немедленно переходит к следующей итерации.

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

Это было полезно?

Решение

Под неложностью они подразумевают следующее:

return true;

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

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

Предупредит одного, двух, четырех, пяти

Другие советы

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

В Javascript есть идеи «правдивости» и «ложности».Если переменная имеет значение, то обычно (как вы увидите) она имеет «правдивость» — нулевую, или отсутствие значения приводит к «ложности».Фрагменты ниже могут помочь:

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 — хорошие стороны

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

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

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

$(".row").each( function() {
    if ( leaveTheLoop ) 
        return; //go to next iteration in .each()
    ... do stuff here ...
});

Петля только сломается, если вы вернетесь буквально false.Бывший:

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

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

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

   // otherwise do something
});

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

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

$(".row").each( function() {
    if (skipIteration) {
        $.noop()
    }
    else{doSomething}
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top