29 votes

Quelle est la meilleure façon de faire des boucles en JavaScript

J'ai trébuché dans plusieurs méthodes d'une boucle en JavaScript, ce que j'aime le plus c'est:

for(var i = 0; i < a.length; i++){
    var element = a[i];
}

Mais comme testé ici (http://www.robertnyman.com/2008/04/11/javascript-loop-performance/), il devrait probablement être écrit de telle sorte que la longueur n'est calculée qu'une seule fois.

En jQuery il y a un .chaque que vous pouvez coller une fonction. J'aime un peu mieux, parce que je n'ai pas de type de la matrice à deux reprises, comme dans la solution ci-dessus.

Si JavaScript pris en charge les macros, il serait un morceau de gâteau pour le rouleau de votre propre, mais malheureusement il ne fonctionne pas.

Alors, que faites-vous les gars?

37voto

Ash Points 31541

J'ai commencé à utiliser les itérateurs, le cas échéant. La Performance est raisonnable, cependant, plus important encore, il permet d'encapsuler la boucle de la logique:

function createIterator(x) {
    var i = 0;

     return function(){
       return x[i++];
    };
}

Puis à utiliser:

var iterator=createIterator(['a','b','c','d','e','f','g']);

iterator();

renvoie "a";

iterator();

renvoie "b";

et ainsi de suite.

Pour itérer l'ensemble de la liste et l'affichage de chaque élément:

var courant;

while(courant=iterator())
{
console.journal(en cours);
}

Sachez que ce qui précède est acceptable pour l'itération d'une liste qui contient des "non-falsy" valeurs". Si ce tableau contient de:

  • 0
  • faux
  • ""
  • null
  • NaN

la précédente boucle s'arrête à ce point, pas toujours ce que vous voulez/attendre.

Pour éviter cette utilisation:

var current;

while((current=iterator())!==undefined)
{
   console.log(current);
}

10voto

Chase Seibert Points 7609

Petite amélioration par rapport à l'original, pour ne calculer la taille du tableau qu'une seule fois:

 for(var i = 0, len = a.length; i < len; i++){ var element = a[i]; }
 

De plus, je vois beaucoup de boucles for..in. Cependant, gardez à l'esprit qu'il n'est pas techniquement casher et posera des problèmes avec Prototype en particulier:

 for (i in a) { var element = a[i]; }
 

6voto

yuku Points 15705

Enregistrez simplement la longueur dans une variable en premier.

   var len = a.length;
  for (var i = 0; i < len; i++) {
    var element = a[i];
  }
 

6voto

Remy Sharp Points 2953

Je sais que je suis en retard à la fête, mais j'utilise des boucles inverses pour les boucles qui ne dépendent pas de l'ordre.

Très similaire à @Mr. Rat musqué - mais simplifiant le test:

 var i = a.length, element = null;
while (i--) {
  element = a[i];
}
 

2voto

Kibbee Points 36474

Vous pouvez toujours utiliser une boucle while et calculer la limite du tableau avant la main.

 Var max = a.length-1;
var i = 0;

while(i <= max)
{
var element = a[i];
i++;
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X