2
3

More than 3 years have passed since last update.

【Javascript】for文の書き方3種類について

Last updated at Posted at 2021-02-02

はじめに

Javascriptのfor文は繰り返し行われる処理を記述するための構文です。ループとも言われますが、こちらのfor文、書き方が3つあったので纏めてみました。

目次

  • for文(基本形)
  • for in
  • for of

for文(基本形)

古い書き方で「初期値、繰り返す条件、増加値(increment)」の3つを引数として渡す必要があります。

for (初期値,繰り返す条件,増加値){
     処理内容
}

for文(基本形)の例

const students = [{id: 1, name: 'Tanaka', grade: 'A'},
{id: 2, name: 'Suzuki', grade: 'B'},
{id: 3, name: 'Kimura', grade: 'C'}]

for (let i = 0; i < students.length; i++) {
    let student = students[i];
    if (student.grade === 'A') {
        console.log(i, student.name);
    }
}

変数iの初期値を0,配列studentsの中身の数だけ繰り返し処理が終わる度に変数iに1を足していく感じです。
スクリーンショット 2021-02-02 13.05.38.png

for in

配列の中身を繰り返し処理するfor文です。特徴としては変数iには配列の添字が格納されるということです。

for (配列の添字を表す変数 in 配列){
     処理内容
}

配列の添字として使われる変数名は今回iを使用しましたが、決まっていはいません。ただ、「i,j,k」などの変数は増減を表す変数としてよく使われています。

(前略
for (let i in students) {
    let student = students[i];   
      if (student.grade === 'A') {
          console.log(i, student.name);
     }
}

配列studentsの中身を配列の添字i(0~2まで)で一つひとつ取り出して、繰り返し処理を行います。注意点はfor in はオブジェクトのプロパティ名を並べるものであるので、変数iの値も文字、students[i]の値も文字になります。つまり、変数iはインデックスとしての機能を失ってしまい、他の演算等絡む場合に誤動作の元になるのでループで回す場合にはお勧めできません。

スクリーンショット 2021-02-02 14.56.01.png

for of

「for in」と似ていますが、特徴としては変数iには配列の中身が格納されるという点が違います。こちら他のfor文と比べ使いやすいですが、新しい記述なので古いブラウザーには対応しません。なので、BabelやWebpackerでバージョンを下げる必要があります。

for (配列の中身を表す変数 of 配列){
     処理内容
}

変数はなんでもいいのですが、基本的には配列を複数形にし変数には単数形を使います。「i,j,k」などは増加値を表すのに使われる場合が多いので、今回の場合にはお勧めしません。

(前略
for (let student of students) {
    if (student.grade === 'A') {
        console.log(student.name);
    }
}

配列studentsの中身を変数studentに渡しいます。
スクリーンショット 2021-02-02 13.30.21.png
こちらを上記2つのfor文と同じように、indexも表示する場合には以下のように書きます。

①.keys()メソッドを利用する

// 添字を受け取る場合
for (let i of students.keys()) { // 数値で渡される
   let student = students[i];
     if (student.grade === 'A') {
         console.log(i, student.name);
    }
 }

スクリーンショット 2021-02-02 15.32.32.png

②.entries()メソッドを利用する

// 添字も中身も受け取る場合
for (let [i, student] of students.entries()) {
    if (student.grade === 'A') {
        console.log(i, student.name);
    }
}

スクリーンショット 2021-02-02 15.35.45.png

2
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3