如此处所述, 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已经有这个能力了:
.forEach
const someArray = [9, 2, 5]; someArray.forEach((value, index) => { console.log(index); // 0, 1, 2 console.log(value); // 9, 2, 5 });
但是如果你想要 的能力for...of,那么你可以map将数组指向索引和值:
for...of
map
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.. }
可迭代版本
--downlevelIteration如果您使用编译器选项进行编译,这将在针对 ES3 或 ES5 时起作用。
--downlevelIteration
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 的回答.entries()中概述的方法。
.entries()