如这里所述,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已经有这个能力:
const someArray = [9, 2, 5];
someArray.forEach((value, index) => {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
});
但如果你想要for的能力…,然后你可以将数组映射到索引和值:
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版本
如果你使用——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()方法。
其他回答
“老式javascript”来拯救(对于那些不熟悉/不喜欢函数式编程的人)
for (let i = 0; i < someArray.length ; i++) {
let item = someArray[i];
}
看到:Array.prototype.entries ()
for (const [key, item] of someArray.entries()) { ... }
在TS中,这需要以ES2015为目标,因为它要求运行时支持迭代器,而ES5运行时不支持。当然,您可以使用Babel之类的工具使输出在ES5运行时工作。
.forEach已经有这个能力:
const someArray = [9, 2, 5];
someArray.forEach((value, index) => {
console.log(index); // 0, 1, 2
console.log(value); // 9, 2, 5
});
但如果你想要for的能力…,然后你可以将数组映射到索引和值:
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版本
如果你使用——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()方法。
在处理集合时,可以使用for..in TypeScript操作符来访问索引。
var test = [7,8,9];
for (var i in test) {
console.log(i + ': ' + test[i]);
}
输出:
0: 7
1: 8
2: 9
看到演示
或者另一个老派的解决方案:
var someArray = [9, 2, 5];
let i = 0;
for (var item of someArray) {
console.log(item); // 9,2,5
i++;
}