Comment sortir de jQuery chaque boucle

677

Comment sortir d'une eachboucle jQuery ?

J'ai essayé:

 return false;

Dans la boucle mais cela n'a pas fonctionné. Des idées?

Luke101
la source
11
Pour la postérité: pourquoi le questionneur a-t-il dit que le retour de faux n'a pas fonctionné? Presque toutes les réponses disent de le faire. Vous vous demandez si c'est peut-être parce que cela ne termine que la boucle each. Une instruction return à l'intérieur d'une boucle for, en revanche, quitterait la boucle et la fonction appelante . Pour obtenir un tel comportement drastique d'une boucle each, vous devez définir un indicateur avec une portée de fermeture à l'intérieur de chaque boucle, puis répondre à l'indicateur en dehors.
Bob Stein
8
@ BobStein-VisiBone Quelqu'un a supprimé mon commentaire d'origine. J'ai mis le return falsemauvais endroit. Quand je l'ai réparé, tout fonctionnait.
Luke101
1
Je ne sais pas pourquoi la "mise à jour" indique que return falsecela ne fonctionne pas $().each- car c'est le cas.
billynoah
2
@ Luke101, vous devez mettre à jour la question pour clarifier ce qui ne fonctionnait pas. Ce Q / R n'a aucun sens lorsque votre question dit que la réponse acceptée ne fonctionne pas.
xr280xr

Réponses:

1183

Pour breakune boucle $.eachor $(selector).each, vous devez retourner falsedans la boucle de rappel.

Le retour truepasse à l'itération suivante, équivalant à un continuedans une boucle normale.

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

// or

$(selector).each(function() {
  if (condition) {
    return false;
  }
});
CMS
la source
3
Juste ce que je cherchais, merci. @OZZIE, utilisez simplement "return true;" ou "retour faux;" en fonction de vos conditions.
dchayka
2
Que signifie @CMS avec "rappel falsedans la boucle de retour "? Où est-ce exactement?
mesqueeb
Par exemple$.each(array, function(key, value) { if(value == "foo") return false; });
SteveEdson
1
Je ne sais pas jQuery a dû échanger les positions des paramètres du javascript forEach.
Mikee
1
@AlexR Sortir d'un $().eachse fait exactement de la même manière, votre édition ne sert qu'à semer la confusion.
Jake
57

Selon la documentation return false;devrait faire le travail.

Nous pouvons rompre la boucle $ .each () [..] en renvoyant false la fonction de rappel.

Retourne faux dans le rappel:

function callback(indexInArray, valueOfElement) {
  var booleanKeepGoing;

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

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

BTW, continuefonctionne comme ceci:

Renvoyer une valeur non fausse équivaut à une instruction continue dans une boucle for; il sautera immédiatement à la prochaine itération.

powtac
la source
35

J'ai créé un violon pour la réponse à cette question car la réponse acceptée est incorrecte et c'est le premier thread StackOverflow renvoyé par Google concernant cette question.

Pour sortir d'un $ .each, vous devez utiliser return false;

Voici un violon qui le prouve:

http://jsfiddle.net/9XqRy/

iamjpg
la source
14
J'aime le violon, mais je ne sais pas pourquoi vous dites que la réponse acceptée est incorrecte, parce que vous dites tous les deux la même chose.
gitsitgo
34

Je suis tombé sur la situation où j'ai rencontré une condition qui a rompu la boucle, mais le code après la fonction .each () était toujours exécuté. J'ai ensuite défini un indicateur sur "true" avec une vérification immédiate de l'indicateur après la fonction .each () pour m'assurer que le code qui a suivi n'a pas été exécuté.

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

"each" utilise la fonction de rappel. La fonction de rappel s'exécute indépendamment de la fonction appelante, il n'est donc pas possible de revenir à la fonction appelante à partir de la fonction de rappel.

utilisez for loop si vous devez arrêter l'exécution de la boucle en fonction d'une condition et rester dans la même fonction.

Sumit Jambhale
la source
6

Je sais que c'est une question assez ancienne mais je n'ai vu aucune réponse, qui précise que pourquoi et quand il est possible de rompre avec le retour.

Je voudrais l'expliquer avec 2 exemples simples:

1. Exemple: Dans ce cas, nous avons une itération simple et nous voulons rompre avec return true, si nous pouvons trouver les trois.

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

si nous appelons cette fonction, elle retournera simplement le vrai.

2. Exemple Dans ce cas, nous voulons itérer avec chaque fonction de jquery , qui prend une fonction anonyme comme paramètre.

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
la source