En Java, vous pouvez utiliser une for
boucle pour parcourir des objets dans un tableau comme suit:
String[] myStringArray = {"Hello", "World"};
for (String s : myStringArray)
{
// Do something
}
Pouvez-vous faire de même en JavaScript?
javascript
arrays
loops
for-loop
Mark Szymanski
la source
la source
for-in
in
etof
qui peut être utilisé et faire des choses différentes. Ensuite, vous avez égalementforEach
et la boucle basée sur l'index laid et ennuyeux. Toutes les autres langues modernes permettent de parcourir une collection facilement et sans aucune surprise ni confusion. JS le pourrait aussi, mais ce n'est pas le cas.Réponses:
Vous avez plusieurs options:
1.
for
Boucle séquentielle :Avantages
break
etcontinue
contrôler les instructions de fluxLes inconvénients
2. Array.prototype.forEach
La spécification ES5 a introduit de nombreuses méthodes de tableau bénéfiques, l'une d'entre elles,
Array.prototype.forEach
et elle nous donne un moyen concis d'itérer sur un tableau:Étant près de dix ans au moment de la publication de la spécification ES5 (décembre 2009), elle a été implémentée par presque tous les moteurs modernes dans les environnements de bureau, de serveur et mobiles, il est donc sûr de les utiliser.
Et avec la syntaxe de la fonction flèche ES6, c'est encore plus succinct:
Les fonctions fléchées sont également largement implémentées, sauf si vous prévoyez de prendre en charge les anciennes plates-formes (par exemple, IE11); vous pouvez également aller en toute sécurité.
Avantages
Les inconvénients
break
/continue
Normalement, vous pouvez remplacer la nécessité de
break
sortir des boucles impératives en filtrant les éléments du tableau avant de les itérer, par exemple:Gardez à l'esprit que si vous itérez un tableau pour en construire un autre , vous devriez utiliser
map
, j'ai vu cet anti-modèle tant de fois.Anti-motif:
Cas d'utilisation approprié de la carte :
En outre, si vous essayez de réduire le tableau à une valeur, par exemple, vous souhaitez additionner un tableau de nombres, vous devez utiliser la méthode de réduction .
Anti-motif:
Utilisation appropriée de réduire :
3. ES6
for-of
déclarationLa norme ES6 introduit le concept d'objets itérables et définit une nouvelle construction pour parcourir les données, l'
for...of
instruction.Cette instruction fonctionne pour tout type d'objet itérable et également pour les générateurs (tout objet ayant une
[Symbol.iterator]
propriété).Les objets tableau sont par définition des itérables intégrés dans ES6, vous pouvez donc utiliser cette instruction sur eux:
Avantages
break
/continue
).Les inconvénients
Ne pas utiliser
for...in
@zipcodeman suggère l'utilisation de l'
for...in
instruction, mais pour itérer les tableauxfor-in
, cette instruction est destinée à énumérer les propriétés des objets.Il ne doit pas être utilisé pour les objets de type tableau car:
Le deuxième point est que cela peut vous poser beaucoup de problèmes, par exemple, si vous étendez l'
Array.prototype
objet pour y inclure une méthode, cette propriété sera également énumérée.Par exemple:
Le code ci-dessus consolera le journal "a", "b", "c" et "foo!".
Cela peut être particulièrement problématique si vous utilisez une bibliothèque qui dépend fortement de l'augmentation des prototypes natifs (comme MooTools).
L'
for-in
instruction comme je l'ai déjà dit est là pour énumérer les propriétés des objets, par exemple:Dans l'exemple ci-dessus, la
hasOwnProperty
méthode vous permet d'énumérer uniquement ses propres propriétés , c'est tout, uniquement les propriétés que possède physiquement l'objet, pas de propriétés héritées.Je vous recommande de lire l'article suivant:
la source
false
,undefined
,0
,""
,NaN
.Oui, en supposant que votre implémentation inclut la fonctionnalité
for
...of
introduite dans ECMAScript 2015 (la version "Harmony") ... ce qui est une hypothèse assez sûre de nos jours.Cela fonctionne comme ceci:
Ou mieux encore, car ECMAScript 2015 fournit également des variables de portée bloc:
(La variable
s
est différente à chaque itération, mais peut toujours être déclaréeconst
à l'intérieur du corps de la boucle tant qu'elle n'y est pas modifiée.)Une note sur les tableaux clairsemés: un tableau en JavaScript peut ne pas réellement stocker autant d'éléments que rapporté par son
length
; ce nombre déclaré est simplement supérieur de un à l'indice le plus élevé auquel une valeur est stockée. Si le tableau contient moins d'éléments que ne l'indique sa longueur, il est dit qu'il est rare . Par exemple, il est parfaitement légitime d'avoir un tableau avec des éléments uniquement aux index 3, 12 et 247; le rapportlength
d'un tel tableau est signalé comme 248, bien qu'il ne stocke en réalité que 3 valeurs. Si vous essayez d'accéder à un élément à tout autre index, le tableau semblera y avoir laundefined
valeur. Donc, quand vous voulez "boucler" un tableau, vous avez une question à répondre: voulez-vous boucler sur toute la plage indiquée par sa longueur et son processusundefined
s pour tout élément manquant, ou souhaitez-vous uniquement traiter les éléments réellement présents? Il existe de nombreuses applications pour les deux approches; cela dépend simplement de la raison pour laquelle vous utilisez le tableau.Si vous parcourez un tableau avec
for
..of
, le corps de la boucle est exécutélength
fois et la variable de contrôle de boucle est définie surundefined
pour tous les éléments qui ne sont pas réellement présents dans le tableau. Selon les détails de votre code "faire quelque chose avec", ce comportement peut être ce que vous voulez, mais sinon, vous devez utiliser une approche différente.Bien sûr, certains développeurs ont pas d'autre choix que d'utiliser de toute façon une approche différente, parce que , pour une raison quelconque , ils ciblez une version de JavaScript qui ne supporte pas encore
for
...of
.Tant que votre implémentation JavaScript est conforme à l' édition précédente de la spécification ECMAScript (qui exclut, par exemple, les versions d'Internet Explorer avant 9), vous pouvez utiliser la
Array#forEach
méthode itérateur au lieu d'une boucle. Dans ce cas, vous passez une fonction à appeler sur chaque élément du tableau:Contrairement à
for
...of
,.forEach
n'appelle la fonction que pour les éléments réellement présents dans le tableau. Si passé notre tableau hypothétique avec trois éléments et une longueur de 248, il n'appellera la fonction que trois fois, pas 248 fois. Il distingue également les éléments manquants des éléments réellement définis surundefined
; pour ce dernier, il appellera toujours la fonction, en passantundefined
comme argument. Si cela est la façon dont vous voulez gérer des tableaux rares,.forEach
peut - être le chemin à parcourir , même si vos supports d'interprétationfor
...of
.La dernière option, qui fonctionne dans toutes les versions de JavaScript, est une boucle de comptage explicite . Vous comptez simplement de 0 à un de moins que la longueur et utilisez le compteur comme index. La boucle de base ressemble à ceci:
Un avantage de cette approche est que vous pouvez choisir comment gérer les tableaux clairsemés; le code ci - dessus courra le corps de la boucle les pleins
length
temps, avecs
jeu àundefined
pour les éléments manquants, tout commefor
..of
. Si vous souhaitez gérer uniquement les éléments réellement présents d'un tableau fragmenté, comme.forEach
, vous pouvez ajouter unin
test simple sur l'index:L'attribution de la valeur de longueur à la variable locale (au lieu d'inclure l'
myStringArray.length
expression complète dans la condition de boucle) peut faire une différence significative dans les performances car elle ignore une recherche de propriété à chaque fois; en utilisant Rhino sur ma machine, l'accélération est de 43%.Vous pouvez voir la mise en cache de longueur effectuée dans la clause d'initialisation de boucle, comme ceci:
La boucle de comptage explicite signifie également que vous avez accès à l'index de chaque valeur, si vous le souhaitez. L'index est également passé en tant que paramètre supplémentaire à la fonction à laquelle vous passez
forEach
, vous pouvez donc y accéder également:for
...of
ne vous donne pas l'index associé à chaque objet, mais tant que l'objet que vous parcourez est en fait unArray
(for
..of
fonctionne pour d'autres types itérables qui peuvent ne pas avoir cette méthode), vous pouvez utiliser le tableau #entries, méthode pour le changer en un tableau de paires [index, item], puis itérer sur cela:La syntaxe
for
...in
mentionnée par d'autres est pour boucler sur les propriétés d'un objet; puisqu'un tableau en JavaScript n'est qu'un objet avec des noms de propriétés numériques (et unelength
propriété mise à jour automatiquement ), vous pouvez théoriquement boucler sur un tableau avec lui. Mais le problème est qu'il ne se limite pas aux valeurs des propriétés numériques (rappelez-vous que même les méthodes ne sont en fait que des propriétés dont la valeur est une fermeture), et il n'est pas non plus garanti d'itérer sur celles dans l'ordre numérique. Par conséquent, la syntaxefor
... nein
doit pas être utilisée pour parcourir les tableaux.la source
i in myStringArray
dans votre exemple? Comment cela peut-il être faux?a=[1,2,3,4]; delete a[2]; for (j in a) { console.log(j); }
sorties 0, 1, 3 et 4.a.length
est toujours 5.for j in a
. Je démontre que lein
chèque n'est pas redondant, comme vous l'avez prétendu, en montrant tous les index et en montrant qu'il y en a un entre 0 etlength-1
qui n'est pas là. J'aurais pu également imprimer2 in a
, ce qui est effectivement le casfalse
, même si vous avez dit que c'était impossible.Vous pouvez utiliser
map
, qui est une technique de programmation fonctionnelle qui est également disponible dans d'autres langages comme Python et Haskell .La syntaxe générale est:
En général
func
, prendrait un paramètre, qui est un élément du tableau. Mais dans le cas de JavaScript, il peut prendre un deuxième paramètre qui est l'index de l'élément, et un troisième paramètre qui est le tableau lui-même.La valeur de retour de
array.map
est un autre tableau, vous pouvez donc l'utiliser comme ceci:Et maintenant x l'est
[10,20,30,40]
.Vous n'avez pas besoin d'écrire la fonction en ligne. Ce pourrait être une fonction distincte.
ce qui serait en quelque sorte équivalent à:
Sauf que vous ne comprenez pas
new_list
.la source
Array.forEach
.map
sert à générer un nouveau tableau.Array.prototype.map
méthode fait partie de la norme ECMAScript 5e édition, n'est pas encore disponible sur toutes les implémentations (par exemple, IE en manque), également pour itérer sur un tableau, je pense que laArray.prototype.forEach
méthode est plus sémantiquement correcte ... aussi merci de ne pas '' t suggérer la déclaration for-in, voir ma réponse pour plus de détails :)forEach
etmap
est que le premier ne renvoie pas les résultats de l'itération.map
(parfois aliascollect
, mais très différent deapply
) sert expressément à transformer chaque élément d'un tableau en un résultat correspondant; c'est un mappage 1 à 1 , d'où le nom. Cela fait partie d'une famille entière d'opérations qui incluentreduce
(qui produit un seul résultat à partir du tableau entier) etfilter
(qui produit un sous-ensemble du tableau d'origine) et ainsi de suite. AlorsforEach
que fait juste quelque chose avec chaque élément, la sémantique n'est pas spécifiée.En JavaScript, il n'est pas conseillé de parcourir un tableau avec une boucle for-in, mais il est préférable d'utiliser une
for
boucle telle que:Il est également optimisé ("mise en cache" de la longueur du tableau). Si vous souhaitez en savoir plus, lisez mon article sur le sujet .
la source
++i
place dei++
++i
est une optimisation à l'ancienne que les compilateurs modernes font pour vous dans une boucle for depuis longtemps :) stackoverflow.com/a/1547433/1033348i_stop
oui_end
au lieu delen
. Il est tout aussi lisible (sinon plus!), Et vous éviterez naturellement ce genre de problème (puisque votre autre boucle obtiendra, par exemple,j_stop
).pour (soit s de myStringArray) {
(Répondre directement à votre question: maintenant vous pouvez!)
La plupart des autres réponses sont exactes, mais elles ne mentionnent pas (au moment où nous écrivons) que ECMA Script
62015 apporte un nouveau mécanisme pour faire l'itération, lafor..of
boucle.Cette nouvelle syntaxe est la manière la plus élégante d'itérer un tableau en javascript (tant que vous n'avez pas besoin de l'index d'itération).
Il fonctionne actuellement avec Firefox 13+, Chrome 37+ et il ne fonctionne pas nativement avec d'autres navigateurs (voir la compatibilité du navigateur ci-dessous). Heureusement, nous avons des compilateurs JS (tels que Babel ) qui nous permettent d'utiliser des fonctionnalités de nouvelle génération aujourd'hui.
Il fonctionne également sur Node (je l'ai testé sur la version 0.12.0).
Itération d'un tableau
Itération d'un tableau d'objets
Itération d'un générateur:
(exemple extrait de https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of )
Tableau de compatibilité: http://kangax.github.io/es5-compat-table/es6/#For..of loops
Spec: http://wiki.ecmascript.org/doku.php?id=harmony:iterators
}
la source
const s
au lieu devar s
var s of arr
est presque le double (1,9x) du temps d'exécution par rapport à l'utilisation d'un simple compteur for-loop et la récupération d'éléments par index dans nodejsOpera, Safari, Firefox et Chrome partagent désormais tous un ensemble de méthodes Array améliorées pour optimiser de nombreuses boucles courantes.
Vous n'avez peut-être pas besoin de tous, mais ils peuvent être très utiles, ou le seraient si tous les navigateurs les prenaient en charge.
Mozilla Labs a publié les algorithmes qu'ils utilisent et WebKit , afin que vous puissiez les ajouter vous-même.
Le filtre renvoie un tableau d'éléments qui satisfont à une condition ou à un test.
every renvoie true si chaque membre du tableau réussit le test.
certains retournent vrai si aucun passe le test.
forEach exécute une fonction sur chaque membre du tableau et ne renvoie rien.
map est comme forEach, mais il retourne un tableau des résultats de l'opération pour chaque élément.
Ces méthodes prennent toutes une fonction pour leur premier argument et ont un deuxième argument facultatif, qui est un objet dont vous souhaitez imposer la portée aux membres du tableau lors de leur boucle dans la fonction.
Ignorez-le jusqu'à ce que vous en ayez besoin.
indexOf et lastIndexOf trouvent la position appropriée du premier ou du dernier élément qui correspond exactement à son argument.
la source
Intro
Depuis mon passage à l'université, j'ai programmé en Java, JavaScript, Pascal, ABAP , PHP, Progress 4GL, C / C ++ et peut-être quelques autres langages auxquels je ne peux pas penser en ce moment.
Bien qu'ils aient tous leurs propres idiosyncrasies linguistiques, chacune de ces langues partage bon nombre des mêmes concepts de base. Ces concepts incluent les procédures / fonctions, les
IF
instructions, lesFOR
boucles et lesWHILE
boucles.Une
for
boucle traditionnelleUne
for
boucle traditionnelle a trois composantes:Ces trois composants sont séparés les uns des autres par un
;
symbole. Le contenu de chacun de ces trois composants est facultatif, ce qui signifie que ce qui suit est lafor
boucle la plus minimale possible:Bien sûr, vous devrez inclure un
if(condition === true) { break; }
ou unif(condition === true) { return; }
quelque part à l'intérieur de cettefor
boucle pour qu'elle cesse de fonctionner.Habituellement, cependant, l'initialisation est utilisée pour déclarer un index, la condition est utilisée pour comparer cet index avec une valeur minimale ou maximale, et la réflexion après coup est utilisée pour incrémenter l'index:
Utilisation d'une
for
boucle traditionnelle pour parcourir un tableauLa façon traditionnelle de parcourir un tableau est la suivante:
Ou, si vous préférez boucler en arrière, vous procédez comme suit:
Il existe cependant de nombreuses variantes possibles, comme par exemple celle-ci:
... ou celui-ci ...
... ou celui-ci:
Celui qui fonctionne le mieux est en grande partie une question de goût personnel et de cas d'utilisation spécifique que vous implémentez.
Notez que chacune de ces variantes est supportée par tous les navigateurs, y compris les très très anciens!
Une
while
boucleUne alternative à une
for
boucle est unewhile
boucle. Pour parcourir un tableau, vous pouvez procéder comme suit:Comme les
for
boucles traditionnelles , leswhile
boucles sont prises en charge par même les plus anciens des navigateurs.Notez également que chaque boucle while peut être réécrite sous forme de
for
boucle. Par exemple, lawhile
boucle ci-dessus se comporte exactement de la même manière que cettefor
boucle:For...in
etfor...of
En JavaScript, vous pouvez également faire ceci:
Cependant, cela doit être utilisé avec précaution, car il ne se comporte pas de la même manière qu'une
for
boucle traditionnelle dans tous les cas, et il existe des effets secondaires potentiels qui doivent être pris en compte. Voir Pourquoi l'utilisation de "for ... in" avec l'itération de tableau est une mauvaise idée? pour plus de détails.Comme alternative à
for...in
, il y a maintenant aussi pourfor...of
. L'exemple suivant montre la différence entre unefor...of
boucle et unefor...in
boucle:De plus, vous devez considérer qu'aucune version d'Internet Explorer ne prend en charge
for...of
( Edge 12+ le fait) et celafor...in
nécessite au moins Internet Explorer 10.Array.prototype.forEach()
Une alternative à
for
-loops estArray.prototype.forEach()
, qui utilise la syntaxe suivante:Array.prototype.forEach()
est pris en charge par tous les navigateurs modernes, ainsi qu'Internet Explorer 9 et versions ultérieures.Bibliothèques
Enfin, de nombreuses bibliothèques d'utilitaires ont également leur propre
foreach
variante. AFAIK, les trois plus populaires sont les suivantes:jQuery.each()
, dans jQuery :_.each()
, dans Underscore.js :_.forEach()
, dans Lodash.js :la source
Utilisez la boucle while ...
journaux: «un», «deux», «trois»
Et pour l'ordre inverse, une boucle encore plus efficace
journaux: «trois», «deux», «un»
Ou la
for
boucle classiquejournaux: «un», «deux», «trois»
Référence: http://www.sitepoint.com/google-closure-how-not-to-write-javascript/
la source
Si vous voulez une manière concise d'écrire une boucle rapide et vous pouvez répéter en sens inverse:
Cela a l'avantage de mettre en cache la longueur (similaire
for (var i=0, len=myArray.length; i<len; ++i)
et différentefor (var i=0; i<myArray.length; ++i)
) tout en étant moins de caractères à taper.Il y a même des moments où vous devez effectuer une itération inverse, comme lors de l'itération sur une NodeList en direct où vous prévoyez de supprimer des éléments du DOM pendant l'itération.
la source
for (var i=0,len=array.length;i<len;++i)
était une boucle commune et sensible à écrire.Certains cas d'utilisation de bouclage à travers un tableau de la manière de programmation fonctionnelle en JavaScript:
1. Il suffit de parcourir un tableau
Remarque: Array.prototype.forEach () n'est pas une manière fonctionnelle à proprement parler, car la fonction qu'il prend comme paramètre d'entrée n'est pas censée renvoyer une valeur, qui ne peut donc pas être considérée comme une fonction pure.
2. Vérifiez si l'un des éléments d'un tableau réussit un test
3. Transformez-vous en un nouveau tableau
Remarque: La méthode map () crée un nouveau tableau avec les résultats de l'appel d'une fonction fournie sur chaque élément du tableau appelant.
4. Résumez une propriété particulière et calculez sa moyenne
5. Créez un nouveau tableau basé sur l'original mais sans le modifier
6. Comptez le nombre de chaque catégorie
7. Récupérer un sous-ensemble d'un tableau en fonction de critères particuliers
Remarque: La méthode filter () crée un nouveau tableau avec tous les éléments qui réussissent le test implémenté par la fonction fournie.
8. Trier un tableau
9. Trouver un élément dans un tableau
La méthode Array.prototype.find () renvoie la valeur du premier élément du tableau qui satisfait la fonction de test fournie.
Références
la source
Il existe un moyen de le faire lorsque vous avez très peu de portée implicite dans votre boucle et de supprimer les variables supplémentaires.
Ou si vous voulez vraiment obtenir l'id et avoir une
for
boucle vraiment classique :Les navigateurs modernes toutes les méthodes iterator de soutien
forEach
,map
,reduce
,filter
et une foule d'autres méthodes sur le prototype Array .la source
Il existe différentes façons de parcourir le tableau en JavaScript.
Boucle générique:
ES5 forEach:
jQuery.each:
Jetez un oeil à cela pour des informations détaillées ou vous pouvez également vérifier MDN pour boucler à travers un tableau en JavaScript et en utilisant jQuery vérifier jQuery pour chacun .
la source
Je recommande vivement d'utiliser la bibliothèque underscore.js . Il vous offre diverses fonctions que vous pouvez utiliser pour parcourir les tableaux / collections.
Par exemple:
la source
underscore
si ECMA-262 a été ajouté laforEach
méthor. Le code natif est toujours meilleur.Boucle de tableau:
Boucle d'objet:
la source
Oui , vous pouvez faire la même chose en JavaScript en utilisant une boucle, mais sans s'y limiter , il existe de nombreuses façons de faire une boucle sur des tableaux en JavaScript. Imaginez que vous avez ce tableau ci-dessous et que vous souhaitez faire une boucle dessus:
Ce sont les solutions:
1) Pour la boucle
Une
for
boucle est un moyen courant de parcourir les tableaux en JavaScript, mais n'est pas considérée comme la solution la plus rapide pour les grands tableaux:2) En boucle
Une boucle while est considérée comme le moyen le plus rapide de parcourir de longs tableaux, mais elle est généralement moins utilisée dans le code JavaScript:
3) Faites pendant que
A
do while
fait la même chosewhile
qu'avec une différence de syntaxe comme ci-dessous:Ce sont les principales façons de faire des boucles JavaScript, mais il existe plusieurs autres façons de le faire.
Nous utilisons également une
for in
boucle pour faire une boucle sur des objets en JavaScript.Regardez aussi les
map()
,filter()
,reduce()
, etc. fonctions sur un tableau en JavaScript. Ils peuvent faire les choses beaucoup plus rapidement et mieux que d'utiliserwhile
etfor
.C'est un bon article si vous souhaitez en savoir plus sur les fonctions asynchrones sur les tableaux en JavaScript.
En savoir plus >> ici :
la source
Si quelqu'un s'intéresse aux performances des multiples mécanismes disponibles pour les itérations de tableau, j'ai préparé les tests JSPerf suivants:
https://jsperf.com/fastest-array-iterator
Résultats:
L'
for()
itérateur traditionnel est de loin la méthode la plus rapide, surtout lorsqu'il est utilisé avec la longueur de tableau mise en cache .Les
Array.prototype.forEach()
et lesArray.prototype.map()
méthodes sont les plus lents approximations, probablement en raison de la surcharge d'appel de fonction .la source
i = i +1
au lieu dei++
Si vous utilisez la bibliothèque jQuery, pensez à utiliser http://api.jquery.com/jQuery.each/
De la documentation:
la source
Je n'ai pas encore vu cette variation, que j'aime personnellement le mieux:
Étant donné un tableau:
Vous pouvez faire une boucle dessus sans jamais accéder à la propriété length:
Voir ce JsFiddle démontrant que: http://jsfiddle.net/prvzk/
Cela ne fonctionne que pour les tableaux qui ne sont pas rares. Cela signifie qu'il existe en fait une valeur à chaque index du tableau. Cependant, j'ai trouvé que dans la pratique, j'utilise rarement des tableaux clairsemés en JavaScript ... Dans de tels cas, il est généralement beaucoup plus facile d'utiliser un objet comme carte / table de hachage. Si vous avez un tableau clairsemé et que vous souhaitez boucler sur 0 .. longueur-1, vous avez besoin de la construction for (var i = 0; i <someArray.length; ++ i), mais vous avez toujours besoin d'un
if
à l'intérieur de la boucle pour vérifier si l'élément de l'index en cours est réellement défini.De plus, comme CMS le mentionne dans un commentaire ci-dessous, vous ne pouvez l'utiliser que sur des tableaux qui ne contiennent aucune valeur fausse. Le tableau de chaînes de l'exemple fonctionne, mais si vous avez des chaînes vides, ou des nombres qui sont 0 ou NaN, etc., la boucle se rompra prématurément. Encore une fois dans la pratique, ce n'est presque jamais un problème pour moi, mais c'est quelque chose à garder à l'esprit, ce qui en fait une boucle à penser avant de l'utiliser ... Cela peut le disqualifier pour certaines personnes :)
Ce que j'aime dans cette boucle c'est:
La raison pour laquelle cela fonctionne est que la spécification du tableau stipule que lorsque vous lisez un élément à partir d'un index> = la longueur du tableau, il retournera indéfini. Lorsque vous écrivez à un tel emplacement, cela mettra à jour la longueur.
Pour moi, cette construction émule le plus fidèlement la syntaxe Java 5 que j'aime:
... avec l'avantage supplémentaire de connaître également l'index actuel dans la boucle
la source
0
,false
,NaN
,null
ouundefined
, avant mêmei
atteint la longueur, par exemple: jsfiddle.net/prvzk/1(item=someArray[i]) !== undefined
.Il existe une méthode pour parcourir uniquement les propriétés de ses propres objets, à l'exclusion de celles du prototype:
mais il itérera toujours sur les propriétés personnalisées.
En JavaScript, toute propriété personnalisée peut être affectée à n'importe quel objet, y compris un tableau.
Si l'on veut parcourir un tableau épars,
for (var i = 0; i < array.length; i++) if (i in array)
ouarray.forEach
aveces5shim
doit être utilisé.la source
for (var i in array) if (++i)
?Il existe plusieurs façons de le faire en JavaScript. Les deux premiers exemples sont des exemples JavaScript. Le troisième utilise une bibliothèque JavaScript, c'est-à-dire que jQuery utilise la
.each()
fonction.la source
for...in
devrait être évité pour les objets de type tableauLa manière la plus élégante et la plus rapide
http://jsperf.com/native-loop-performance/8
Modifié (parce que j'avais tort)
Comparaison des méthodes pour parcourir un tableau de 100 000 éléments et effectuer à chaque fois une opération minimale avec la nouvelle valeur.
Préparation:
Tests:
la source
L'approche optimisée consiste à mettre en cache la longueur du tableau et à utiliser un modèle var unique initialisant toutes les variables avec un seul mot clé var.
Si l'ordre d'itération n'a pas d'importance que vous devriez essayer la boucle inversée, c'est plus rapide car cela réduit les tests de condition de surcharge et la décrémentation est dans une instruction:
ou mieux et plus propre à utiliser en boucle:
la source
En JavaScript, il existe de nombreuses solutions pour boucler un tableau.
Le code ci-dessous est populaire
la source
Si vous souhaitez utiliser jQuery, il a un bel exemple dans sa documentation:
la source
À mon avis, la meilleure façon est d'utiliser la fonction Array.forEach. Si vous ne pouvez pas l'utiliser, je vous suggère d'obtenir le polyfill de MDN. Pour le rendre disponible, c'est certainement le moyen le plus sûr d'itérer sur un tableau en JavaScript.
Array.prototype.forEach ()
Donc, comme d'autres l'ont suggéré, c'est presque toujours ce que vous voulez:
Cela garantit que tout ce dont vous avez besoin dans la portée du traitement du tableau reste dans cette portée, et que vous ne traitez que les valeurs du tableau, pas les propriétés de l'objet et les autres membres, ce qui est ce que
for ..
cas.Utilisation d'un style C normal
for
boucle fonctionne dans la plupart des cas. Il est juste important de se rappeler que tout dans la boucle partage sa portée avec le reste de votre programme, le {} ne crée pas de nouvelle portée.Par conséquent:
affichera "11" - qui peut ou non être ce que vous voulez.
Un exemple de jsFiddle fonctionnel: https://jsfiddle.net/workingClassHacker/pxpv2dh5/7/
la source
Ce n'est pas 100% identique, mais similaire:
la source
Par exemple, j'ai utilisé dans une console Firefox:
la source
Beaucoup plus propre ...
la source
z.forEach(j => console.log(j));
.Réponse courte: oui. Vous pouvez faire cela:
Dans une console de navigateur, vous pouvez voir quelque chose comme "element1", "element2", etc., imprimé.
la source
Vous pouvez soit utiliser
Array.prototype.forEach(...)
:Ou
Array.prototype.map(...)
:Ou le jquery ou pour les chemins de boucle mentionnés précédemment.
la source