Como sair do jQuery cada loop

674

Como faço para sair de um eachloop jQuery ?

Eu tentei:

 return false;

No loop, mas isso não funcionou. Alguma ideia?

Luke101
fonte
10
Para a posteridade: por que o questionador disse que retornar falso não funcionou? Praticamente toda resposta diz para fazer isso. Querendo saber se era possivelmente porque isso só termina o cada ciclo. Uma declaração de retorno dentro de um loop for, ao contrário, sairia do loop e da função de chamada . Para obter um comportamento tão drástico de cada loop, você precisa definir um sinalizador com escopo de fechamento dentro de cada loop e responder ao sinalizador fora dele.
Bob Stein
7
@ BobStein-VisiBone Alguém excluiu meu comentário original. Eu coloquei return falseno lugar errado. Quando eu consertei tudo funcionou.
Luke101
1
não sei por que a "atualização" diz return falseque não funciona $().each- porque funciona.
Billynoah # 30/18
2
@ Luke101, você deve atualizar a pergunta para deixar claro o que não estava funcionando. Esta pergunta / pergunta não faz sentido quando sua pergunta diz que a resposta aceita não funciona.
Xr280xr 30/07/19

Respostas:

1176

Para breakum $.eachou $(selector).eachloop, você tem que voltar falseno retorno loop.

Retornar truepula para a próxima iteração, equivalente a um continueloop normal.

$.each(array, function(key, value) { 
    if(value === "foo") {
        return false; // breaks
    }
});

// or

$(selector).each(function() {
  if (condition) {
    return false;
  }
});
CMS
fonte
3
Apenas o que eu estava procurando, obrigado. @OZZIE, basta usar "return true"; ou "retornar falso"; com base nas suas condições.
Dchayka
2
O que significa @CMS com "retorno falseno retorno de chamada do loop"? Onde exatamente é isso?
mesqueeb
Por exemplo$.each(array, function(key, value) { if(value == "foo") return false; });
SteveEdson 12/04
1
Não sei, o jQuery precisou trocar as posições dos parâmetros do javascript forEach.
Mikee
1
@AlexR Romper com um $().eaché feito exatamente da mesma maneira, sua edição serve apenas para causar confusão.
Jake
57

De acordo com a documentação return false;deve fazer o trabalho.

Podemos quebrar o loop $ .each () [..] fazendo com que a função de retorno de chamada retorne falsa.

Retorne false no retorno de chamada:

function callback(indexInArray, valueOfElement) {
  var booleanKeepGoing;

  this; // == valueOfElement (casted to Object)

  return booleanKeepGoing; // optional, unless false 
                           // and want to stop looping
}

BTW, continuefunciona assim:

Retornar não falso é o mesmo que uma instrução continue em um loop for; pulará imediatamente para a próxima iteração.

Powtac
fonte
35

Eu criei um Fiddle para a resposta a esta pergunta porque a resposta aceita está incorreta e esse é o primeiro thread StackOverflow retornado pelo Google em relação a essa pergunta.

Para sair de um $ .each, você deve usar return false;

Aqui está um violino provando:

http://jsfiddle.net/9XqRy/

iamjpg
fonte
14
Gosto do violino, mas não sei por que você diz que a resposta aceita está incorreta, porque os dois estão dizendo a mesma coisa.
Gititgo
34

Me deparei com a situação em que encontrei uma condição que quebrou o loop, mas o código após a função .each () ainda é executado. Em seguida, defino um sinalizador como "true" com uma verificação imediata do sinalizador após a função .each () para garantir que o código a seguir não foi executado.

$('.groupName').each(function() {
    if($(this).text() == groupname){
        alert('This group already exists');
        breakOut = true;
        return false;
    }
});
if(breakOut) {
    breakOut = false;
    return false;
} 
David Aguirre
fonte
7

"each" usa a função de retorno de chamada. A função de retorno de chamada é executada independentemente da função de chamada, portanto, não é possível retornar à função de chamada a partir da função de retorno de chamada.

use for loop se você precisar interromper a execução do loop com base em alguma condição e permanecer na mesma função.

Sumit Jambhale
fonte
6

Eu sei que é uma pergunta bastante antiga, mas não vi nenhuma resposta, que esclareça isso porque e quando é possível romper com o retorno.

Eu gostaria de explicar com 2 exemplos simples:

1. Exemplo: neste caso, temos uma iteração simples e queremos quebrar com return true, se pudermos encontrar os três.

function canFindThree() {
    for(var i = 0; i < 5; i++) {
        if(i === 3) {
           return true;
        }
    }
}

se chamarmos essa função, ela simplesmente retornará o valor verdadeiro.

2. Exemplo Neste caso, queremos iterar com cada função do jquery , que assume a função anônima como parâmetro.

function canFindThree() {

    var result = false;

    $.each([1, 2, 3, 4, 5], function(key, value) { 
        if(value === 3) {
            result = true;
            return false; //This will only exit the anonymous function and stop the iteration immediatelly.
        }
    });

    return result; //This will exit the function with return true;
}
Vural
fonte