JavaScriptのforEach内で「continue」や「break」のような動作をさせる方法
配列でループ処理をしたいとき、forEach
を使うとかなりラクに実装できます。
ただし、forEach
内ではcontinue
やbreak
が使えません。
今回はその代替となる方法をまとめておきます。
forEachについて
forEach
を使うと、配列に含まれる要素を順に取り出してコールバック関数に渡して処理ができます。
let days = ['日', '月' ,'火', '水', '木', '金', '土'];
days.forEach((day, index) =>{
console.log(day);
});
これで配列がループされて、コンソールに各配列の値が表示されます。
日
月
火
水
木
金
土
continueと同じ動きにする
forEach
内でreturn
すると、その時点で次のループへスキップされます。
let days = ['日', '月' ,'火', '水', '木', '金', '土'];
days.forEach((day, index) =>{
if(index === 1){
return; // 「月」のみスキップされる
}
console.log(day);
});
これで「月」のみスキップされます。
日
火
水
木
金
土
ちなみに、return
でもreturn true
でもreturn false
でも関係なくすべて同じ結果になります。
breakと同じ動きにする
break
と同じ動きはforEach
ではできないため、some
を利用します。
使い方はforEach
とほとんど変わりませんが、true
を返すとその時点で処理が終了する特性を持っています。
let days = ['日', '月' ,'火', '水', '木', '金', '土'];
days.forEach((day, index) =>{
if(index === 1){
return true; // 「月」の時点で終了する
}
console.log(day);
});
これで「月」の時点で終了するので、「日」のみがコンソールに出力されます。
日
ただ、some
は本来テスト関数として定義されていて本来の使い方とは違いますし、名前からしてループ処理だと判断しにくいのでオススメはしません。
そこまでするくらいだったら素直にfor
にしてbreak
を使った方がよさそうです。