Como ignorar a próxima iteração em jQuery.each () util?
-
20-08-2019 - |
Pergunta
Eu estou tentando iterate através de um conjunto de elementos. documentação do jQuery diz:
Retornando não falso é o mesmo que uma instrução continue em um loop for, ele vai pular imediatamente para a próxima iteração.
Eu tentei chamar o retorno não false; " e 'não-false;' (Sans retorno) nenhum dos quais pular para a próxima iteração. Em vez disso, eles quebram o ciclo. O que eu estou ausente?
Solução
O que eles querem dizer com não-falso é:
return true;
Assim, este código:
var arr = [ "one", "two", "three", "four", "five" ];
$.each(arr, function(i) {
if(arr[i] == 'three') {
return true;
}
alert(arr[i]);
});
Will um, dois, quatro, cinco alerta ??p>
Outras dicas
Por 'retorno não-falso', eles significam para devolver qualquer valor que não iria trabalhar para booleano falso. Então você poderia voltar true
, 1
, 'non-false'
, ou qualquer outra coisa que você pode pensar-se.
Javascript tipo de tem a idéia de 'truthiness' e 'falsiness'. Se uma variável tem um valor, em seguida, geralmente 9AS você vai ver) que tem 'truthiness' - nulo, ou nenhum valor tende a 'falsiness'. Os trechos abaixo podem ajudar:
var temp1;
if ( temp1 )... // false
var temp2 = true;
if ( temp2 )... // true
var temp3 = "";
if ( temp3 ).... // false
var temp4 = "hello world";
if ( temp4 )... // true
Esperamos que ajuda?
Além disso, vale a pena verificar esses vídeos de Douglas Crockford
Atualização: graças @cphpython para detectar os links quebrados - Eu tenho atualizado para apontar para as versões trabalhando agora
Não esqueça que você pode, por vezes, apenas a cair no final do bloco para chegar à próxima iteração:
$(".row").each( function() {
if ( ! leaveTheLoop ) {
... do stuff here ...
}
});
Ao invés de realmente retornando assim:
$(".row").each( function() {
if ( leaveTheLoop )
return; //go to next iteration in .each()
... do stuff here ...
});
O loop única quebras se você retornar literalmente false
. Ex:
// this is how jquery calls your function
// notice hard comparison (===) against false
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
break;
}
Isto significa que você pode retornar qualquer outra coisa, incluindo undefined
, que é o que você voltar se você retornar nada, então você pode simplesmente usar uma instrução de retorno vazio:
$.each(collection, function (index, item) {
if (!someTestCondition)
return; // go to next iteration
// otherwise do something
});
É possível que este pode variar conforme a versão; Isto é aplicável para jquery 1.12.4. Mas, realmente, quando você sair da parte inferior da função, você também está retornando nada, e é por isso que o ciclo continua, então eu esperaria que não há possibilidade alguma de que devolver nada poderia não continuar o ciclo. A menos que eles querem forçar todos a começar a retornar algo para manter o loop vai, retornando nada tem para ser uma maneira de mantê-lo ir.
jQuery.noop () pode ajudar
$(".row").each( function() {
if (skipIteration) {
$.noop()
}
else{doSomething}
});