For loop 用于。。。是否使用索引/键?

For loop 用于。。。是否使用索引/键?,for-loop,foreach,typescript,For Loop,Foreach,Typescript,如上所述,TypeScript引入了foreach循环: var someArray = [9, 2, 5]; for (var item of someArray) { console.log(item); // 9,2,5 } 但是没有索引/键吗?我希望有这样的情况: for (var item, key of someArray) { ... } 已具备以下能力: const someArray = [9, 2, 5]; someArray.forEach((value, in

如上所述,TypeScript引入了foreach循环:

var someArray = [9, 2, 5];
for (var item of someArray) {
    console.log(item); // 9,2,5
}
但是没有索引/键吗?我希望有这样的情况:

for (var item, key of someArray) { ... }
已具备以下能力:

const someArray = [9, 2, 5];
someArray.forEach((value, index) => {
    console.log(index); // 0, 1, 2
    console.log(value); // 9, 2, 5
});
但是,如果您想获得的…的功能,则可以将数组设置为索引和值:

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..
}
Array.prototype.entries()-ES6+

如果您能够针对ES6+环境,则可以使用中概述的方法。

在TS中,这需要以ES2015为目标,而ES5运行时没有。当然,您可以使用类似这样的方法使输出在ES5运行时工作。

“老式javascript”来拯救(对于不熟悉/热爱函数式编程的人)

for(设i=0;i
处理集合时,可以使用for..in类型脚本操作符访问索引

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++;
}

但是TypeScript将“for…of”编译成一个简单的“for”,它有一个索引var\u i。因此,TypeScript开发人员很容易让我们使用它。请参见操场示例:bit.ly/1R9SfBR@Mick这取决于目标。当传输到ES6时,它不会这样做。传输时需要额外代码的原因只是为了让ES6代码在过去的版本中正常工作;在这个forEach?中,也是一个很好的答案@JoãoSilva,您可以使用
Array.some()
,并在要停止的迭代中返回false。它远不如
中断
那么清晰或漂亮,但它可以完成工作。就我个人而言,我不喜欢它,我可能会以其他方式重新编写迭代:)请注意,“I”是一个字符串,而不是循环中带有for..in的int。使用“i”执行算术运算将导致字符串串联。(i+1)将等于“01”,例如,当i=0
for..in
还可以为您提供超出预期的功能,因为它还包括在对象上声明的所有函数。例如:
For(window.document中的var prop){console.log(prop);}
。没有使用额外的方法只为每个元素生成一个索引。谢谢你!我们不知道:)如果您以es5为目标,请在
tsconfig
中显式启用
downLevelIteration
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++;
}