説明したように ここ 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
にはすでにこの機能があります。
var someArray = [9, 2, 5];
someArray.forEach((item, index) => {
console.log(item); // 9, 2, 5
console.log(index); // 0, 1, 2
});
しかしfor...of
の能力が必要な場合は、アイテムとインデックスへの配列を map
できます。
for (const {item, index} of someArray.map((item, index) => ({ item, index }))) {
console.log(item); // 9, 2, 5
console.log(index); // 0, 1, 2
}
それは少し長いので、それを再利用可能な関数に投入するのに役立ちます:
function toItemIndexes<T>(a: T[]) {
return a.map((item, index) => ({ item, index }));
}
for (const {item, index} of toItemIndexes(someArray)) {
// ..etc..
}
反復可能バージョン
--downlevelIteration
コンパイラオプションを使用してコンパイルした場合、これはES3またはES5をターゲットにしている場合に機能します。
function* toItemIndexes<T>(items: T[] | IterableIterator<T>) {
let index = 0;
for (const item of items) {
yield { item, index };
index++;
}
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries
for (var [key, item] of someArray.entries()) { ... }
TSではこれはES2015 をターゲットにすることを必要とします。なぜならそれはランタイムがイテレータ をサポートすることを必要とするからです。 ES5ランタイムで出力を機能させるために、 Babel のようなものを使用することもできます。
「オールドスクールジャバスクリプト」を助けに(慣れていない人や関数型プログラミングを愛する人のための)
for (let i = 0; i < someArray.length ; i++) {
let item = someArray[i];
}
コレクションを処理するときに 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++;
}