jQueryでfor文を使った繰り返し処理の書き方です。
continue
やbreake
を使えば、途中のループを1つ飛ばしたり、途中で終了させたりもできます。
for文のパフォーマンスを考慮して書く方法も併せてご紹介します。
目次
for文の基本
単純なfor文の使い方です。
条件式で指定した数まで、繰り返し処理を行います。
1 2 3 4 5 6 7 8 9 10 11 |
$(function() { // for文で初期値と繰り返しの条件式を指定 for (var i=0; i<4; i++) { // コンソールに0〜3の連番を表示 console.log(i); } }); |
結果(コンソール)
0
1
2
3
0
~3
まで表示されました。
コンソールについては下記ページでご紹介しています。
for文の基本構文
for文は以下のような構文になります。
for (初期値; 繰り返しの条件式; 増減式) {
繰り返す処理
}
for文の動作
先ほどのサンプルは以下のように動作しています。
- まず変数
i
に初期値となる0
を格納する。
for (var i = 0; i<4; i++) { - 次に変数
i
が4
未満の場合、処理を続けなさいと命じる。
for (var i = 0; i<4; i++) { - そして
i++
で変数i
に+1
ずつ数字を足しながら繰り返し処理をする。
for (var i = 0; i<4; i++) { - それからコンソールに
0
と表示させる。
console.log(i); - そしてまた式の最初に戻り、
i
は1
なので、処理を続行。
for (var i = 0; i<4; i++) { - そして
i
に1
を足す。
for (var i = 0; i<4; i++) { - まだ
i
は4
に満たないので処理を続け、1
と追加で表示させる。
console.log(i);
………
……
…と繰り返していくとi
が4
になりi<4
の条件に合わなくなるため、処理を終了します。
つまり3
までは処理してくれます。
for文は通常0
から始まるように指定することが多いです。
for文を使わない場合
では上記のサンプルをfor文を使わずに書く場合はどうなるか?
以下のようになります。
1 2 3 4 5 6 7 8 9 |
$(function() { // コンソールに0〜3の連番を表示 console.log(0); console.log(1); console.log(2); console.log(3); }); |
少ない処理だと上記のように書いてもいいですが、例えば0歳~80歳まで1歳刻みのプルダウンメニューを作るとなるとどうでしょう?
option
タグを81個も作らないといけませんね。
「オラ」を1,000回表示させたい場合だとどうでしょう?
for文のような繰り返し処理を使わないと、気が遠くなる作業になりますね。
「continue」でループ処理中に特定の値をスキップ
for文で繰り返し処理中に、特定の値だけスキップする場合はcontinue
が便利です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$(function() { // for文で初期値と繰り返しの条件式を指定 for (var i=1; i<5; i++) { //if文で3の時の条件分岐を指定 if (i == 3) { //3が出たらcontinueでスキップ continue; } // コンソールに1・2・4を表示 console.log(i); } }); |
結果(コンソール)
1
2
4
if文で3
の時だけcontinue
を使ってスキップするよう条件分岐し3
だけスキップさせました。
「break」で特定の値でループ処理を中止
for文で繰り返し処理中に特定の値以降は処理を中止する場合break
が便利です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$(function() { // for文で初期値と繰り返しの条件式を指定 for (var i=1; i<5; i++) { //if文で3の時の条件分岐を指定 if (i == 3) { //3が出たらbreakで中止 break; } // コンソールに1・2だけ表示 console.log(i); } }); |
結果(コンソール)
1
2
if文で3
が出たらbleak
を使って処理を中止するよう条件分岐し3
以降は処理を中止させました。
continue
break
ともに、同じ繰り返し処理でもeach()
で使うとエラーとなるため、注意しましょう。
配列のループ処理
lengthでカウント
配列をfor文でループ処理する際はlength
で配列の値をカウントし、条件式に指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$(function() { //都道府県名が入った配列を変数に格納 var citys = ['神奈川','大阪','福岡']; // 条件式をcitys.lengthとすれば配列をカウントできる for (var i=0; i<citys.length; i++) { // コンソールに都道府県を表示 console.log(citys[i]); } }); |
結果(コンソール)
神奈川
大阪
福岡
一番上のサンプルではi<5;
と数字を条件式に入れていましたが、値の数が不特定多数な配列などでは、このような方法をよく使います。
以下のように使います。
変数.length
length
は配列以外にも要素数や文字数のカウントにも使えます。
lengthはfor文の外で変数に格納しておく
配列をfor分でループ処理する際、上記のようにfor文の条件式内でlength
を使って数をカウントすると、1ループごとにカウントするので処理が重くなります。
以下のようにfor文の外でカウントしましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$(function() { //都道府県名が入った配列を変数に格納 var citys = ['神奈川','大阪','福岡']; //配列をカウントして値の数を変数に格納 var len = citys.length; //2が入る // 配列をカウントした変数を条件式に指定 for (var i=0; i<len; i++) { // コンソールに都道府県を表示 console.log(citys[i]); } }); |
あらかじめ配列をカウントし、変数に値の個数を入れることで、1ループごとにカウントする手間が省けます。
体感速度は変わらないでしょうが、重い処理となると差が出るため、クセを付けておきたいですね。
breakeやらbleak
PG歴浅いでしょ
予約語なんか手が勝手に覚えていそうな
breakのスペルを一部間違えておりました。申し訳ございません、訂正させていただきました。
またご指摘いただきありがとうございます。
今後このような間違いがないよう、チェックをしっかりやってまいります。