.forEach
ma już tę zdolność:
var someArray = [9, 2, 5];
someArray.forEach((item, index) => {
console.log(item); // 9, 2, 5
console.log(index); // 0, 1, 2
});
Ale jeśli chcesz zdolności for...of
, można map
tablicę do żądanej pozycji i index:
for (const {item, index} of someArray.map((item, index) => ({ item, index }))) {
console.log(item); // 9, 2, 5
console.log(index); // 0, 1, 2
}
To trochę za długo, więc pomaga rzucić je w funkcję wielokrotnego użytku:
function toItemIndexes<T>(a: T[]) {
return a.map((item, index) => ({ item, index }));
}
for (const {item, index} of toItemIndexes(someArray)) {
// ..etc..
}
iterowalny Wersja
Taka opcja kierowania ES3 lub ES5 jeśli skompilować z opcją --downlevelIteration
kompilatora.
function* toItemIndexes<T>(items: T[] | IterableIterator<T>) {
let index = 0;
for (const item of items) {
yield { item, index };
index++;
}
}
Ale maszynopis kompiluje "dla ... z" na prostą "za", która ma _I Indeks var. Łatwiej więc programistom TypeScript pozwolić nam używać tego _i. Zobacz przykład placu zabaw: bit.ly/1R9SfBR – Mick
@ Wybierz zależność od celu. Podczas transpozycji do ES6 nie robi tego. Powód tego dodatkowego kodu podczas transpozycji jest tylko po to, aby kod ES6 działał w poprzednich wersjach. –
Jak można zrobić przerwę; w tym dlaEe? –