.forEach
ha già questa capacità:
var someArray = [9, 2, 5];
someArray.forEach((item, index) => {
console.log(item); // 9, 2, 5
console.log(index); // 0, 1, 2
});
Ma se si vuole le capacità di for...of
, allora si può map
la matrice alla voce e index:
for (const {item, index} of someArray.map((item, index) => ({ item, index }))) {
console.log(item); // 9, 2, 5
console.log(index); // 0, 1, 2
}
Questo è un po 'lungo, quindi aiuta a lanciarlo in una funzione riutilizzabile:
function toItemIndexes<T>(a: T[]) {
return a.map((item, index) => ({ item, index }));
}
for (const {item, index} of toItemIndexes(someArray)) {
// ..etc..
}
Iterable Versione
Questo funziona quando si mira ES3 o ES5 se si compila con l'opzione --downlevelIteration
compilatore.
function* toItemIndexes<T>(items: T[] | IterableIterator<T>) {
let index = 0;
for (const item of items) {
yield { item, index };
index++;
}
}
fonte
2016-03-19 23:16:15
Ma dattiloscritto compila "per ... di" ad un semplice "per" che ha un indice di _I var. Quindi sarebbe facile per gli sviluppatori di TypeScript permetterci di usare questo _i. Vedi l'esempio del campo da gioco: bit.ly/1R9SfBR – Mick
@Mick dipende dall'obiettivo. Quando si esegue il transpiling su ES6, non lo fa. Il motivo per questo codice in più durante il transpiling è solo quello di far funzionare il codice ES6 nelle versioni precedenti. –
Come puoi fare una pausa? in quel per tutti? –