web-dev-qa-db-fra.com

Comment passer à la prochaine itération dans jQuery.each () util?

J'essaie de parcourir un tableau d'éléments. La documentation de jQuery dit:

documentation jquery.Each ()

Renvoyer non-false est identique à une instruction continue dans une boucle for, elle passera immédiatement à la prochaine itération.

J'ai essayé d'appeler 'return non-false'; et 'non-faux;' (sans retour) dont aucun ne passe à la prochaine itération. Au lieu de cela, ils cassent la boucle. Qu'est-ce que je rate?

423
Josh

Ce qu'ils entendent par non-faux est:

return true;

Donc ce code:

var arr = [ "one", "two", "three", "four", "five" ];
$.each(arr, function(i) {
    if(arr[i] == 'three') {
        return true;
    }
    alert(arr[i]);
});

Va alerter un, deux, quatre, cinq

770
Paolo Bergantino

Par "return non-false", ils entendent renvoyer toute valeur qui ne fonctionnerait pas comme booléen false. Ainsi, vous pouvez retourner true, 1, 'non-false', ou tout ce que vous pouvez imaginer.

61
tj111

Javascript a en quelque sorte l'idée de "véracité" et de "fausseté". Si une variable a une valeur, généralement (comme vous le verrez), elle a la "véracité" - nulle ou aucune valeur tend à la "fausseté". Les extraits ci-dessous pourraient vous aider:

var temp1; 
if ( temp1 )...  // false

var temp2 = true;
if ( temp2 )...  // true

var temp3 = "";
if ( temp3 ).... // false

var temp4 = "hello world";
if ( temp4 )...  // true

J'espère que ça aide?

En outre, il vaut la peine de regarder ces vidéos de Douglas Crockford

mise à jour: merci @cphpython pour avoir repéré les liens brisés - J'ai mis à jour mes versions actuelles

Le langage Javascript

Javascript - les bonnes parties

5
mlennox

N'oubliez pas que vous pouvez parfois tomber de la fin du bloc pour passer à la prochaine itération:

$(".row").each( function() {
    if ( ! leaveTheLoop ) {
        ... do stuff here ...
    }
});

Plutôt que de revenir comme ça:

$(".row").each( function() {
    if ( leaveTheLoop ) 
        return; //go to next iteration in .each()
    ... do stuff here ...
});
3
Lee Meador

La boucle niquement se rompt si vous retournez littéralement false. Ex:

// this is how jquery calls your function
// notice hard comparison (===) against false
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
   break;
}

Cela signifie que vous pouvez retourner n'importe quoi d'autre, y compris undefined, ce que vous retournez si vous ne retournez rien, vous pouvez donc simplement utiliser une instruction return vide:

$.each(collection, function (index, item) {
   if (!someTestCondition)
      return; // go to next iteration

   // otherwise do something
});

Il est possible que cela varie selon les versions. Ceci est applicable pour JQuery 1.12.4. Mais vraiment, quand vous sortez du bas de la fonction, vous ne retournez rien non plus, et c'est pourquoi la boucle continue, alors je m'attendrais à ce qu'il n'y ait aucune possibilité que rien ne retourne not continuer le boucle. À moins qu'ils ne veuillent forcer tout le monde à commencer à retourner quelque chose pour que la boucle continue, à ne rien retourner a soit un moyen de continuer.

2
Dave Cousineau