javascript - Comment passer à l'itération suivante dans jQuery.each () util?


J'essaie de parcourir une série d'éléments. La documentation de jQuery dit:

jquery.Each () documentation

Renvoyer non-false est la même chose qu'une instruction continue dans une boucle for, elle passera immédiatement à l'itération suivante.

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




Answers


Ce qu'ils veulent dire 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




Par 'return non-false', ils signifient renvoyer toute valeur qui ne fonctionnerait pas à boolean false. Donc, vous pouvez revenir true , 1 , 'non-false' , ou tout ce que vous pouvez imaginer.




Javascript a en quelque sorte l'idée de «vérité» et de «fausseté». Si une variable a alors une valeur, généralement comme vous le verrez), elle a la "vérité" - nulle, ou aucune valeur ne tend à la "fausseté". Les extraits ci-dessous pourraient 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 vérifier ces vidéos de Douglas Crockford

Le langage Javascript

Javascript - Les bonnes parties




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

$(".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 ...
});



jQuery.noop () peut vous aider

$(".row").each( function() {
    if (skipIteration) {
        $.noop()
    }
    else{doSomething}
});



La boucle ne casse que si vous revenez 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 , qui est ce que vous renvoyez si vous ne renvoyez rien, donc vous pouvez 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 la version. ceci est applicable pour jquery 1.12.4. Mais vraiment, quand vous quittez le bas de la fonction, vous ne retournez rien, et c'est pourquoi la boucle continue, donc je m'attendrais à ce qu'il n'y ait aucune possibilité que rien ne puisse continuer la boucle. À moins qu'ils ne veuillent forcer tout le monde à commencer à retourner quelque chose pour que la boucle continue, rien ne doit être une façon de continuer.