Nous pouvons accéder aux éléments du tableau à l'aide d'une boucle for-of:
for (const j of [1, 2, 3, 4, 5]) {
console.log(j);
}
Comment puis-je modifier ce code pour accéder à l'index en cours également? Je veux y parvenir en utilisant la syntaxe for-of, ni forEach ni for-in.
javascript
ecmascript-6
for-of-loop
Abdennour TOUMI
la source
la source
for-of
avec.entries()
et c'est deux fois plus lent que.forEach()
. jsperf.com/for-of-vs-foreach-with-indexyield
mot clé. Mais j'ai besoin d'accéder à l'index pour mon cas d'utilisation, donc ... ancienne;;
boucle de base , je suppose..entires()
?Array#entries
renvoie l'index et la valeur, si vous avez besoin des deux:la source
document.styleSheets[0].cssRules.entries()
ou mêmedocument.styleSheets.entries()
et probablement de nombreuses autres structures itératives DOM. Il faut encore utiliser_.forEach()
delodash
for (var value of document.styleSheets) {}
. Si vous avez besoin l'index que vous pouvez convertir la valeur à un tableau d' abord parArray.from
:for (let [index, value] of Array.from(document.styleSheets)) {}
.Array.from
est FTWDans ce monde de nouvelles fonctions natives flashy, nous oublions parfois les bases.
Propre, efficace et vous pouvez toujours faire
break
la boucle. Prime! Vous pouvez également commencer par la fin et revenir en arrière aveci--
!Remarque supplémentaire: Si vous utilisez beaucoup la valeur dans la boucle, vous pouvez le faire
const value = arr[i];
en haut de la boucle pour une référence facile et lisible.la source
break
unfor-of
etfor (let [index, value] of array.entries())
est beaucoup plus facile à lire. Revenir en arrière est aussi simple que d'ajouter.reverse()
.dans le contexte html / js, sur les navigateurs modernes, avec d'autres objets itérables que les tableaux, nous pourrions également utiliser [Iterable] .entries ():
la source
entries
méthode pour elles.En
for..of
boucle, nous pouvons y parvenir viaarray.entries()
.array.entries
renvoie un nouvel objet itérateur Array. Un objet itérateur sait comment accéder aux éléments à partir d'un objet itérable à la fois, tout en gardant une trace de sa position actuelle dans cette séquence.Lorsque la
next()
méthode est appelée, les paires valeur / clé de l'itérateur sont générées. Dans ces paires de valeurs de clé, l' index du tableau est la clé et l'élément de tableau est la valeur.Une
for..of
boucle est fondamentalement une construction qui consomme un itérable et boucle à travers tous les éléments (en utilisant un itérateur sous le capot). Nous pouvons combiner cela avecarray.entries()
de la manière suivante:la source
Vous pouvez également gérer l'index vous-même si vous avez besoin de l' index , cela ne fonctionnera pas si vous avez besoin de la clé .
la source
Pour ceux qui utilisent des objets qui ne sont pas un
Array
tableau ou même un tableau, vous pouvez facilement créer votre propre itérable afin que vous puissiez toujours l'utiliserfor of
pour des choses comme celleslocalStorage
qui n'ont vraiment quelength
:Ensuite, donnez-lui simplement un numéro:
la source
es6
for...in
la source
for...of
boucle pas unfor...in
for...in
fait partie de la spécification ECMAScript d'origine (ie "es1"). Notez également que celafor...in
est destiné à itérer sur les propriétés des objets. Bien qu'il puisse parcourir les tableaux, il peut ne pas le faire dans l'ordre attendu. Voir plus dans la documentation MDNUne autre approche pourrait être en utilisant
Array.prototype.forEach()
commela source
la boucle for traverse le tableau, tandis que la propriété indexof prend la valeur de l'index qui correspond au tableau. PD cette méthode a quelques défauts avec les nombres, donc utilisez des fruits
la source
["apple", "apple", "pear"]
les index donnés sont0, 0, 2
au lieu de0, 1, 2
.