for…of文は、ES6より新しく登場した構文でfor文よりも簡単に配列などのループ処理を実装することが出来ます。
しかし、for文ではカウンター変数(初期値)を配列のインデックス番号として扱うことが出来たのに対し、for…of文では配列要素だけが仮変数に代入されインデックス番号として扱う値は何も渡されません。
そこで本記事では、JavaScriptのfor…of文でインデックス番号(添え字)を使う方法について解説しています。
JavaScriptの学習におすすめ書籍
1冊ですべて身につくJavaScript入門講座

メリット
- 誰でも分かるように嚙み砕いて説明してくれる
- アニメーションの知識が深く学べる
- 1つのWebサイトを作りながら学べる


Amazon Kindle Unlimitedに登録すると、月額980円で読み放題だからオススメだよ!



初回30日間は無料だから、まだ登録したことのない人はぜひ試してみてね!
全プログラマー必見!
変数名/関数名にもう悩まない!
変数名/関数名にもう悩まない!
リーダブルコード


メリット
- 美しいコードが書けるが自然と書けるようになる
- 他の開発者が理解しやすいコードになる
著:Dustin Boswell, 著:Trevor Foucher, 解説:須藤 功平, 翻訳:角 征典
¥2,640 (2023/07/23 02:48時点 | Amazon調べ)


目次
for…of文ではインデックス番号(添え字)が使えない?
結論から話しますと、for…of文の基本的な書き方だとインデックス番号を使うことは出来ません。しかし、for…of文を少し改良することでインデックス番号が使えるようになります。
カウンター変数を用意する



1つ目の方法は、自分でカウンター変数を用意する方法だよ!
let arr = ["A", "B", "C", "D", "E"];
let i = 0;
for (let v of arr) {
console.log(`${i}: ${v}`);
i++;
}
/* コンソールログ *
* 0: A
* 1: B
* 2: C
* 3: D
* 4: E
*/
for…of文のブロック外にカウンター用の変数を定義し、初期値に0をセットします。for…of文の最後にカウンター用の変数をインクリメントする処理(i++)を追加します。
entriesメソッドを使う



2つ目の方法は、entriesメソッドを使う方法だよ!
let arr = ["A", "B", "C", "D", "E"];
for (let [i, v] of arr.entries()) {
console.log(`${i}: ${v}`);
}
/* コンソールログ *
* 0: A
* 1: B
* 2: C
* 3: D
* 4: E
*/
ループさせたい配列にentriesメソッドを使います。仮変数を分割代入の形[仮変数1, 仮変数2]にすることで、仮変数1にはインデックス番号が、仮変数2には配列要素が代入されます。