Как описано здесь TypeScript вводит цикл foreach:
var someArray = [9, 2, 5];
for (var item of someArray) {
console.log(item); // 9,2,5
}
Но нет ли индекса/ключа? Я бы ожидал чего-то вроде:
for (var item, key of someArray) { ... }
Как описано здесь TypeScript вводит цикл foreach:
var someArray = [9, 2, 5];
for (var item of someArray) {
console.log(item); // 9,2,5
}
Но нет ли индекса/ключа? Я бы ожидал чего-то вроде:
for (var item, key of someArray) { ... }
.forEach
уже обладает этой способностью:
var someArray = [9, 2, 5];
someArray.forEach((item, index) => {
console.log(item); // 9, 2, 5
console.log(index); // 0, 1, 2
});
Но если вы хотите возможности for...of
, вы можете map
массив к элементу и индексу:
for (const {item, index} of someArray.map((item, index) => ({ item, index }))) {
console.log(item); // 9, 2, 5
console.log(index); // 0, 1, 2
}
Это немного длиннее, поэтому он помогает бросить его в функцию многократного использования:
function toItemIndexes<T>(a: T[]) {
return a.map((item, index) => ({ item, index }));
}
for (const {item, index} of toItemIndexes(someArray)) {
// ..etc..
}
Итерируемая версия
Это будет работать при настройке ES3 или ES5, если вы компилируете с помощью параметра --downlevelIteration
компилятора.
function* toItemIndexes<T>(items: T[] | IterableIterator<T>) {
let index = 0;
for (const item of items) {
yield { item, index };
index++;
}
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries
for (var [key, item] of someArray.entries()) { ... }
В TS это требует таргетинга на ES2015 так как для поддержки итераторов требуется среда выполнения, чего нет в ES5 runtimes. Разумеется, вы можете использовать что-то вроде Babel, чтобы выход работал на время выполнения ES5.
Вы можете использовать оператор для..in TypeScript для доступа к индексу при работе с коллекциями.
var test = [7,8,9];
for (var i in test) {
console.log(i + ': ' + test[i]);
}
Вывод:
0: 7
1: 8
2: 9
Смотрите Демо
"Старая школа javascript" на помощь (для тех, кто не знаком/не любит функциональное программирование)
for (var i = 0; i < someArray.length ; i++) {
var item = someArray[i];
}