Risposte:
.forEach
ha già questa capacità:
const someArray = [9, 2, 5];
someArray.forEach((value, index) => {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
});
Ma se vuoi le abilità di for...of
, allora puoi map
l'array per l'indice e il valore:
for (const { index, value } of someArray.map((value, index) => ({ index, value }))) {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
}
È un po 'lungo, quindi potrebbe essere utile metterlo in una funzione riutilizzabile:
function toEntries<T>(a: T[]) {
return a.map((value, index) => [index, value] as const);
}
for (const [index, value] of toEntries(someArray)) {
// ..etc..
}
Versione Iterable
Funzionerà quando si sceglie ES3 o ES5 se si compila con l' --downlevelIteration
opzione del compilatore.
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 +
Se sei in grado di indirizzare gli ambienti ES6 +, puoi utilizzare il .entries()
metodo come indicato nella risposta di Arnavion .
Array.some()
e restituire false all'iterazione che si desidera interrompere. Non è così chiaro o carino come un break
ma farebbe il lavoro. Personalmente non mi piace, probabilmente riscriverei l'iterazione in qualche altro modo :) vedi 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()) { ... }
In TS questo richiede il targeting ES2015 poiché richiede il runtime per supportare gli iteratori , cosa che non è runtime ES5. Ovviamente puoi usare qualcosa come Babel per far funzionare l'output su runtime ES5.
"Old school javascript" in soccorso (per chi non ha familiarità / ama la programmazione funzionale)
for (let i = 0; i < someArray.length ; i++) {
let item = someArray[i];
}
È possibile utilizzare l' operatore for..in TypeScript per accedere all'indice quando si ha a che fare con le raccolte.
var test = [7,8,9];
for (var i in test) {
console.log(i + ': ' + test[i]);
}
Produzione:
0: 7
1: 8
2: 9
Vedi la demo
for..in
può anche darti più di quello che ti aspettavi in quanto include anche tutte le funzioni dichiarate su un oggetto. Ad esempio:for (var prop in window.document) { console.log(prop); }