.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 map
le 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' --downlevelIteration
option 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,break
mais 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
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.
la source
"Old school javascript" à la rescousse (pour ceux qui ne sont pas familiers / amoureux de la programmation fonctionnelle)
la source
Vous pouvez utiliser l' opérateur TypeScript for..in pour accéder à l'index lorsque vous traitez des collections.
Production:
Voir la démo
la source
for..in
peut é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); }
Ou une autre solution à l'ancienne:
la source