配列の要素文だけ処理を繰り返す forEachメソッド。
前回このメソッドが処理の途中で return を実行しても、そこで処理が終わることなく、すべての要素を実行するまで繰り返し続けることを確認しました。では特定の要素のときだけスキップすることはできるのでしょうか?
この記事では GAS を使って forEachメソッドのスキップ処理、ならには for文でよく使われる continue文が使えるかどうかを見ていきます。
結論:forEachメソッドでは return を使ってスキップ処理ができる。ただし continue は使えない。
さっそくコードを見ていきましょう!
月曜日ならスキップ(何もしない)し、それ以外の曜日であればログに表示させる処理を書いてみました。このときスキップさせるために return を使います。
ログに「火曜日〜日曜日のみ」が表示できればOK!
想定通り forEachメソッドは return を使ってスキップ処理が実行できたと言えるでしょう。
結果はこんな感じ。

問題なくスキップ処理が実行できていますね。
ログには月曜日を除いた「火曜日〜日曜日」が確認できます。
forEachメソッドでは return が実行されても、繰り返し処理そのものが終わることはありません。
今回の場合だと「月曜日」のときだけ return を通るが何も返すものなく次の要素へ移る。「火曜日〜日曜日」のときは Logger.log(day[0]) を通ることで、ログに曜日が表示されました。
continue を使ってスキップ処理をしてみる
繰り返し処理の途中でスキップするなら continue文が思いつく方が多いのではないでしょうか。forEachメソッドでも continue文が使えるかどうか確かめてみました。
return を continue に書き換えてみましたが、構文エラーが発生しコードが動きません。

どうやら forEachメソッドでは continue を使ってスキップ処理はできないようです。試しに forEachの箇所を for文に書き換えてみたところ処理は実行できました。

このことから continue はどんな繰り返し処理にでも使えるわけでなく、for文だから使えたことが分かります。また、for文のときにスキップする目的で return を使うと、処理が終了してしまうので注意が必要です。
forEachメソッドは return を使い、for文は continue を使うとスキップ処理できる
forEachメソッドと for文、どちらも繰り返し処理という点では同じですが、微妙に処理内容に違いがありました。それはすべての要素を繰り返すかどうかという点です。
forEachメソッドはすべての要素分だけ繰り返します。たとえ途中で return が実行されたとしても処理を中断することはありません。
一方、for文ではすべての要素分を繰り返す制約はありません。return が実行されると、当然そこで処理は終わります。
似たような繰り返し処理をするコードでも、ちょっとした処理内容の違いから、スキップする方法に違いが生まれました。それぞれの特性があっておもしろいですね。
以上より、forEachメソッドでスキップ処理をするなら、return を使用し、for文なら continue を使いましょう!