Как перейти к следующей итерации в утилите jQuery.each()?
-
20-08-2019 - |
Вопрос
Я пытаюсь перебрать массив элементов.В документации jQuery говорится:
Возврат неложного значения аналогичен оператору 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 за обнаружение неработающих ссылок - теперь я обновил, чтобы указать на рабочие версии
Не забывайте, что иногда вы можете просто упасть с конца блока, чтобы перейти к следующей итерации:
$(".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}
});