forEachの使い方 - JavaScript入門

f:id:utouto97:20210704222355j:plain

JavaScriptのforEach

JavaScriptでは、forEachを使ってループを記述することもできます。
ただし、JavaScriptのforEachは、配列(Array)のメンバメソッドであるため、配列(Array)でしか利用することができません

以下のように使います。
(arrは配列)

arr.forEach(値を一つずつ受け取って処理するコールバック);

forEachはメソッドなので.でつないで呼び出します。
また、forEachメソッドの引数はコールバック関数となっています。
このコールバック関数は引数として、配列の値を一つずつ受け取り、何かしらの処理を行います。

サンプル

arr = ["JavaScript", "HTML", "CSS", "C/C++", "Ruby"]
 
arr.forEach(e => {
    console.log(e)
})

forEachの引数には、値をeとして受け取り,console.logで表示する関数を渡しています。
結果は次のようになります。

JavaScript
HTML
CSS
C/C++
Ruby

forEachでインデックスも取得する

forEachメソッドに渡すコールバック関数は、引数を最大で三つまでとることができます。

第一引数は先に述べたように、値のための変数です。
第二引数はインデックスを格納するための変数です。
また、第三引数はforEachメソッドを呼び出している配列自体になります。

つまり、引数を二つとるコールバック関数をforEachに渡すことで、インデックスも取得することができます。

サンプルとして、配列の値とそのインデックスを表示してみます。

arr = ["JavaScript", "HTML", "CSS", "C/C++", "Ruby"]

arr.forEach((e, i) => {
    console.log(i + " : " + e)
})
0 : JavaScript
1 : HTML
2 : CSS
3 : C/C++
4 : Ruby

これを利用することで、配列のインデックスと値のペアを一つずつ処理できます。

JavaScriptのforEachから途中で抜ける (breakは使えるのか)

JavaScriptのforEachでbreakは使えない

JavaScriptのbreakは、for文やwhile文のループ文で利用します。
JavaScriptのforEachは、ループ文ではなく、一つのメソッドであるためbreakは使えません。

breakの代替手段

breakは使えないが、ループの途中で抜けたい、というときどうすればいいのでしょうか。
forEachを途中で抜ける方法はありません。

途中で抜けるような処理をforEachで行うこと自体が適切ではないようです。
例えば、何か値を探す処理をforEachで実装し、その値を発見したら抜けることを考えます。
この場合だと、findというメソッドが用意されているため、そちらを利用するのが良いです。

continueについて

ループ文で使うものとして、breakともう一つcontinueがあります。
では、forEachでcontinueが使えるのか、というと利用できません。
繰り返しになりますが、forEachはループ文ではなくメソッドだからです。

ただし、forEachでもcontinueの代替手段は存在します。
continueしたいところで、returnするだけです。
これでうまくいく理由は、forEachの引数はコールバック関数で、値を一つずつ受け取り処理する関数です。
一つの値を処理していて、continueで次に行きたいとなったら、コールバック関数内でreturnすることで、このコールバック関数から抜け、次の値でコールバック関数が呼ばれます。

終わり