Wir können mit einer for-of-Schleife auf Array-Elemente zugreifen:
for (const j of [1, 2, 3, 4, 5]) {
console.log(j);
}
Wie kann ich diesen Code ändern, um auch auf den aktuellen Index zuzugreifen? Ich möchte dies mit der For-of-Syntax erreichen, weder mit forEach noch mit for-in.
javascript
ecmascript-6
for-of-loop
Abdennour TOUMI
quelle
quelle
for-of
mit.entries()
und es ist doppelt so langsam im Vergleich zu.forEach()
. jsperf.com/for-of-vs-foreach-with-indexyield
Schlüsselwort verursacht. Aber ich brauche Zugriff auf den Index für meinen Anwendungsfall, also ...;;
es ist eine grundlegende alte Schleife, denke ich..entires()
?Array#entries
Gibt den Index und den Wert zurück, wenn Sie beide benötigen:quelle
document.styleSheets[0].cssRules.entries()
oder sogardocument.styleSheets.entries()
und wahrscheinlich mit vielen anderen iterierbaren DOM-Strukturen. Muss noch_.forEach()
vonlodash
for (var value of document.styleSheets) {}
. Wenn Sie den Index benötigen, können Sie den Wert zuerst überArray.from
: in ein Array konvertierenfor (let [index, value] of Array.from(document.styleSheets)) {}
.Array.from
ist FTWIn dieser Welt auffälliger neuer nativer Funktionen vergessen wir manchmal die Grundlagen.
Sauber, effizient und Sie können immer noch
break
die Schleife. Bonus! Sie können auch am Ende beginnen und rückwärts gehen miti--
!Zusätzlicher Hinweis: Wenn Sie den Wert häufig in der Schleife verwenden, möchten Sie möglicherweise
const value = arr[i];
oben in der Schleife eine einfache, lesbare Referenz erstellen.quelle
break
einfor-of
undfor (let [index, value] of array.entries())
ist viel einfacher zu lesen. Das Zurückgehen ist so einfach wie das Hinzufügen.reverse()
.Im HTML / JS-Kontext können wir in modernen Browsern mit anderen iterierbaren Objekten als Arrays auch [Iterable] .entries () verwenden:
quelle
entries
Methode vorhanden ist.In einer
for..of
Schleife können wir dies über erreichenarray.entries()
.array.entries
Gibt ein neues Array-Iteratorobjekt zurück. Ein Iteratorobjekt kann von einem iterierbaren Objekt aus auf Elemente zugreifen, während es seine aktuelle Position innerhalb dieser Sequenz verfolgt.Beim
next()
Aufruf der Methode werden auf dem Iterator Schlüsselwertpaare generiert. In diesen Schlüsselwertpaaren ist der Array- Index der Schlüssel und das Array-Element der Wert.Eine
for..of
Schleife ist im Grunde ein Konstrukt, das eine Iterierbarkeit verbraucht und alle Elemente durchläuft (unter Verwendung eines Iterators unter der Haube). Wir können diesarray.entries()
folgendermaßen kombinieren :quelle
Sie können den Index auch selbst bearbeiten, wenn Sie den Index benötigen . Wenn Sie den Schlüssel benötigen, funktioniert er nicht .
quelle
Für diejenigen, die Objekte verwenden, die nicht
Array
oder sogar Array-ähnlich sind, können Sie einfach Ihre eigene iterierbare erstellen, sodass Sie sie weiterhinfor of
für Dinge verwenden können,localStorage
die wirklich nur Folgendes habenlength
:Dann füttere es einfach mit einer Nummer:
quelle
es6
for...in
quelle
for...of
Schleife nicht afor...in
for...in
ist Teil der ursprünglichen ECMAScript-Spezifikation (dh "es1"). Beachten Sie außerdem, dassfor...in
dies zum Durchlaufen von Objekteigenschaften gedacht ist. Es kann zwar über Arrays iterieren, dies jedoch möglicherweise nicht in der erwarteten Reihenfolge. WeitereEin anderer Ansatz könnte
Array.prototype.forEach()
as verwendenquelle
Die for-Schleife durchläuft das Array, während die indexof-Eigenschaft den Wert des Index annimmt, der mit dem Array übereinstimmt. PD Diese Methode hat einige Fehler mit Zahlen, also verwenden Sie Früchte
quelle
["apple", "apple", "pear"]
die angegebenen Indizes0, 0, 2
statt0, 1, 2
.