forEachの使い方 - JavaScript入門
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することで、このコールバック関数から抜け、次の値でコールバック関数が呼ばれます。
終わり