Question

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

documentation sur 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 qui me manque?

Était-ce utile?

La solution

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]);
});

Alerte un, deux, quatre, cinq

Autres conseils

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

Javascript a en quelque sorte l'idée de "véracité" et de "fausseté". Si une variable a une valeur alors, 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

Espérons que cela 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 rompus - J'ai mis à jour mes versions actuelles

Le langage Javascript

Javascript: les bons éléments

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 ceci:

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

La boucle seulement est interrompue 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 renvoyer n'importe quoi d'autre, y compris undefined, ce que vous renvoyez si vous ne retournez rien, vous pouvez donc simplement utiliser une instruction de retour 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 en réalité, lorsque vous quittez le bas de la fonction, vous ne retournez rien non plus. C’est pourquoi la boucle se poursuit. J’attend donc qu’il n’y ait aucune possibilité que rien ne soit renvoyé sans ne continuer le boucle. À moins de vouloir forcer tout le monde à commencer à retourner quelque chose pour garder la boucle, rien ne doit être un moyen de le garder.

jQuery.noop () peut vous aider

$(".row").each( function() {
    if (skipIteration) {
        $.noop()
    }
    else{doSomething}
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top