Pergunta

Eu estou tentando iterate através de um conjunto de elementos. documentação do jQuery diz:

jquery.Each () documentação

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?

Foi útil?

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

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

A linguagem Javascript

Javascript - The Good Parts

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}
});
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top