javascriptのforEach関数内でcontinueのように処理を飛ばす方法

JavaScriptだと配列とかの要素を順々に取り出すのに forEach関数 が使えます。

ただ少し不便なのがfor文とかみたいに continue が使えないことなんですよね。

というわけで forEach 内でcontinueの代わりになるコードを紹介します。

forEach関数のおさらい

JavaScriptをある程度知っている人なら次のような感じでforEach関数を使ったことがあるはず

配列の要素をまとめて処理する時とかに便利ですよね。

 

ただJavaScriptのforEachは他の言語と少し違って関数です。

だから次みたいに  continue;  を使って処理を飛ばすということはできません。

まあfor文でもwhile文の中でもないので当然ですよね・・・

ですが continue を使わなくても処理はスキップする方法はあります。

return文を使えばOK

その方法とは何かというとreturn文を使うことです。

例えば次のような感じで

この例だとインデックスが1番目の要素だけ飛ばされます。(つまり 'Mon' だけ表示されない)

 

単純に関数から return するだけです。

ちなみに  return true;  でも  return false;  でも処理がスキップされます。

breakみたいに処理を中断するには

処理をスキップするのは  continue  ですが、 break  みたいに処理を途中で中断したいこともありますよね。

例えば次のようにインデックスがある数以上を超えたらストップするような感じで

ですがforEachではこのような処理は実はできません。

例えば先ほど書いたように return で返す値をtrueとかfalseに変えたとしても途中でスキップすることになってしまいます。

 

なら解決法はないかというとちゃんとあります。

その解決法とは次の記事で書いたようにsome関数を代わりに使うことです。

some関数はループに使う関数内で  return true;  されるまでずっと処理をし続けるという特長があります。

つまりその性質を利用すればbreakのようなことができるという訳です。

使い方も forEach と全く変わりません。

ここまでまとめ

ここまでのことを簡単にまとめると次の通り

  • forEach内ではcontinueが使えない
  • だから代わりに return; を使う
  • ただしbreakの場合はsome関数で代用

やり方さえ分かってしまえば簡単です。

ただやり方が分からないとかなり苦労しますね。some関数があるとか初めて知りました・・・

ではでは($・・)/~~~

Shareこの記事をシェアしよう!

Commentsこの記事についたコメント

2件のコメント
  • fc

    “for文を使わない” ことが目的になってしまい、余計回りくどい面倒なことをする結果となっているように思いますが。

    9月 29, 2021 8:28 am
    • ぴー助

      コメントありがとうございます。

      仰る通り forEach の乱用は好ましくなく、僕自身も必要のない場面で使ってしまうことも多かったです。本当に必要がある場合以外は、極力 for などを使うべきなのは間違いないです。ただforEachでもこういうことができるという発見があったため記事にしました。ご指摘されていることは間違いなく正しいです。

      9月 30, 2021 8:00 am

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください