小编典典

TypeScript for ... of with index / key?

all

如此处所述
TypeScript 引入了一个 foreach 循环:

var someArray = [9, 2, 5];
for (var item of someArray) {
    console.log(item); // 9,2,5
}

但是没有任何索引/键吗?我希望是这样的:

for (var item, key of someArray) { ... }

阅读 102

收藏
2022-06-16

共1个答案

小编典典

.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 (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 时起作用。

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()中概述的方法。

2022-06-16