Réponses:
.forEach a déjà cette capacité:
const someArray = [9, 2, 5];
someArray.forEach((value, index) => {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
});
Mais si vous voulez les capacités de for...of, alors vous pouvez maple tableau à l'index et à la valeur:
for (const { index, value } of someArray.map((value, index) => ({ index, value }))) {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
}
C'est un peu long, il peut donc être utile de le mettre dans une fonction réutilisable:
function toEntries<T>(a: T[]) {
return a.map((value, index) => [index, value] as const);
}
for (const [index, value] of toEntries(someArray)) {
// ..etc..
}
Version itérable
Cela fonctionnera lorsque vous ciblez ES3 ou ES5 si vous compilez avec l' --downlevelIterationoption du compilateur.
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 +
Si vous pouvez cibler les environnements ES6 +, vous pouvez utiliser la .entries()méthode décrite dans la réponse d'Arnavion .
Array.some()et renvoyer false à l'itération que vous souhaitez arrêter. Ce n'est pas aussi clair ou joli qu'un, breakmais cela ferait le travail. Personnellement, je n'aime pas ça, je réécrirais probablement l'itération d'une autre manière :) voir stackoverflow.com/questions/2641347/…
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries
for (var [key, item] of someArray.entries()) { ... }
Dans TS, cela nécessite de cibler ES2015 car il nécessite que le runtime prenne en charge les itérateurs , ce que les runtimes ES5 ne font pas. Vous pouvez bien sûr utiliser quelque chose comme Babel pour faire fonctionner la sortie sur les environnements d'exécution ES5.
"Old school javascript" à la rescousse (pour ceux qui ne sont pas familiers / amoureux de la programmation fonctionnelle)
for (let i = 0; i < someArray.length ; i++) {
let item = someArray[i];
}
Vous pouvez utiliser l' opérateur TypeScript for..in pour accéder à l'index lorsque vous traitez des collections.
var test = [7,8,9];
for (var i in test) {
console.log(i + ': ' + test[i]);
}
Production:
0: 7
1: 8
2: 9
Voir la démo
for..inpeut également vous donner plus que ce à quoi vous vous attendiez car il inclut également toutes les fonctions déclarées sur un objet. Par exemple:for (var prop in window.document) { console.log(prop); }