如前所述,here TypeScript引入了foreach循环:
var someArray = [9, 2, 5];
for (var item of someArray) {
console.log(item); // 9,2,5
}
但是没有索引/键吗?我期待着这样的事情:
for (var item, key of someArray) { ... }
如前所述,here 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
已经具备了这种能力:
const someArray = [9, 2, 5];
someArray.forEach((value, index) => {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
});
但是如果你想要for...of
的能力,那么你可以将数组设置为索引和值:
for (const { index, value } of someArray.map((value, index) => ({ index, value }))) {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
}
这有点长,所以将其放入可重用函数中可能会有所帮助:
function toEntries<T>(a: T[]) {
return a.map((value, index) => [index, value] as const);
}
for (const [index, value] of toEntries(someArray)) {
// ..etc..
}
Iterable Version
如果您使用--downlevelIteration
编译器选项进行编译,那么在针对ES3或ES5时,这将起作用.
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+
如果您能够针对ES6+环境,那么您可以使用Arnavion's answer中概述的.entries()
方法.