JavaScriptだと配列とかの要素を順々に取り出すのに forEach関数 が使えます。
ただ少し不便なのがfor文とかみたいに continue が使えないことなんですよね。
というわけで forEach 内でcontinueの代わりになるコードを紹介します。
forEach関数のおさらい
JavaScriptをある程度知っている人なら次のような感じでforEach関数を使ったことがあるはず
1 2 3 4 |
let days = ['Sun', 'Mon' ,'Tue', 'Web', 'Thu', 'Fri', 'Sat']; days.forEach(function(day, i){ console.log(day); }); |
配列の要素をまとめて処理する時とかに便利ですよね。
ただJavaScriptのforEachは他の言語と少し違って関数です。
だから次みたいに continue; を使って処理を飛ばすということはできません。
1 2 3 4 5 |
let days = ['Sun', 'Mon' ,'Tue', 'Web', 'Thu', 'Fri', 'Sat']; days.forEach(function(day, i){ if( i === 1 ){ continue; } console.log(day); }); |
まあfor文でもwhile文の中でもないので当然ですよね・・・
ですが continue を使わなくても処理はスキップする方法はあります。
return文を使えばOK
その方法とは何かというとreturn文を使うことです。
例えば次のような感じで
1 2 3 4 5 |
let days = ['Sun', 'Mon' ,'Tue', 'Web', 'Thu', 'Fri', 'Sat']; days.forEach(function(day, i){ if( i === 1 ){ return; } console.log(day); }); |
この例だとインデックスが1番目の要素だけ飛ばされます。(つまり 'Mon' だけ表示されない)
単純に関数から return するだけです。
ちなみに return true; でも return false; でも処理がスキップされます。
breakみたいに処理を中断するには
処理をスキップするのは continue ですが、 break みたいに処理を途中で中断したいこともありますよね。
例えば次のようにインデックスがある数以上を超えたらストップするような感じで
1 2 3 4 5 |
let days = ['Sun', 'Mon' ,'Tue', 'Web', 'Thu', 'Fri', 'Sat']; days.forEach(function(day, i){ if( i > 6 ){ /** breakするためのコード */ } console.log(day); }); |
ですがforEachではこのような処理は実はできません。
例えば先ほど書いたように return で返す値をtrueとかfalseに変えたとしても途中でスキップすることになってしまいます。
なら解決法はないかというとちゃんとあります。
その解決法とは次の記事で書いたようにsome関数を代わりに使うことです。
some関数はループに使う関数内で return true; されるまでずっと処理をし続けるという特長があります。
つまりその性質を利用すればbreakのようなことができるという訳です。
使い方も forEach と全く変わりません。
ここまでまとめ
ここまでのことを簡単にまとめると次の通り
- forEach内ではcontinueが使えない
- だから代わりに return; を使う
- ただしbreakの場合はsome関数で代用
やり方さえ分かってしまえば簡単です。
ただやり方が分からないとかなり苦労しますね。some関数があるとか初めて知りました・・・
ではでは($・・)/~~~