Odpowiedzi:
.forEach
ma już tę zdolność:
const someArray = [9, 2, 5];
someArray.forEach((value, index) => {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
});
Ale jeśli chcesz możliwości for...of
, możesz map
tablicę do indeksu i wartości:
for (const { index, value } of someArray.map((value, index) => ({ index, value }))) {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
}
To trochę za długie, więc może pomóc umieszczenie go w funkcji wielokrotnego użytku:
function toEntries<T>(a: T[]) {
return a.map((value, index) => [index, value] as const);
}
for (const [index, value] of toEntries(someArray)) {
// ..etc..
}
Wersja iterowalna
Będzie to działać w przypadku kierowania na ES3 lub ES5, jeśli kompilujesz z --downlevelIteration
opcją kompilatora.
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 +
Jeśli jesteś w stanie kierować reklamy na środowiska ES6 +, możesz użyć .entries()
metody przedstawionej w odpowiedzi Arnavion .
Array.some()
i zwrócić false w iteracji, którą chcesz zatrzymać. Nie jest tak wyraźny ani ładny jak a, break
ale wystarczyłby do wykonania zadania. Osobiście mi się to nie podoba, prawdopodobnie przepisałbym iterację w inny sposób :) patrz 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()) { ... }
W TS wymaga to ukierunkowania na ES2015, ponieważ wymaga środowiska wykonawczego do obsługi iteratorów , czego nie mają środowiska wykonawcze ES5. Możesz oczywiście użyć czegoś takiego jak Babel, aby wyjście działało w środowiskach wykonawczych ES5.
„Old school javascript” na ratunek (dla tych, którzy nie znają / nie kochają programowania funkcjonalnego)
for (let i = 0; i < someArray.length ; i++) {
let item = someArray[i];
}
Aby uzyskać dostęp do indeksu podczas pracy z kolekcjami, można użyć operatora for..in TypeScript.
var test = [7,8,9];
for (var i in test) {
console.log(i + ': ' + test[i]);
}
Wynik:
0: 7
1: 8
2: 9
Zobacz Demo
for..in
może również dać ci więcej, niż się spodziewałeś, ponieważ zawiera również wszystkie funkcje zadeklarowane w obiekcie. Na przykład:for (var prop in window.document) { console.log(prop); }