.forEach
hat bereits diese Fähigkeit:
const someArray = [9, 2, 5];
someArray.forEach((value, index) => {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
});
Aber wenn Sie die Fähigkeiten von wollen for...of
, dann können Sie map
das Array zum Index und Wert:
for (const { index, value } of someArray.map((value, index) => ({ index, value }))) {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
}
Das ist etwas lang, daher kann es hilfreich sein, es in eine wiederverwendbare Funktion zu versetzen:
function toEntries<T>(a: T[]) {
return a.map((value, index) => [index, value] as const);
}
for (const [index, value] of toEntries(someArray)) {
// ..etc..
}
Iterable Version
Dies funktioniert beim Targeting von ES3 oder ES5, wenn Sie mit der --downlevelIteration
Compileroption kompilieren .
function* toEntries<T>(values: T[] | IterableIterator<T>) {
let index = 0;
for (const value of values) {
yield [index, value] as const;
index++;
}
}
Array.prototype.entries () - ES6 +
Wenn Sie in der Lage sind, auf ES6 + -Umgebungen abzuzielen, können Sie .entries()
die in Arnavions Antwort beschriebene Methode verwenden .
Array.some()
false bei der Iteration verwenden und zurückgeben, die Sie stoppen möchten. Es ist bei weitem nicht so klar oder hübsch wie ein,break
aber es würde die Arbeit erledigen. Persönlich mag ich es nicht, ich würde die Iteration wahrscheinlich auf eine andere Weise neu schreiben :) siehe stackoverflow.com/questions/2641347/…https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries
In TS erfordert dies das Targeting von ES2015, da die Laufzeit Iteratoren unterstützt , was bei ES5-Laufzeiten nicht der Fall ist. Sie können natürlich so etwas wie Babel verwenden , damit die Ausgabe auf ES5-Laufzeiten funktioniert.
quelle
"Old School Javascript" zur Rettung (für diejenigen, die nicht vertraut sind / die funktionale Programmierung lieben)
quelle
Sie können den for..in TypeScript-Operator verwenden, um beim Umgang mit Sammlungen auf den Index zuzugreifen.
Ausgabe:
Siehe Demo
quelle
for..in
kann Ihnen auch mehr geben, als Sie erwartet hatten, da es auch alle Funktionen enthält, die für ein Objekt deklariert wurden. Zum Beispiel:for (var prop in window.document) { console.log(prop); }
Oder eine andere Lösung der alten Schule:
quelle