javascriptでいろんなeachとついたメソッドがあるのは知っていて、なんとなく使っているけど、結局どれがいいのかわからない!!
とこの記事を読んでいる人は思っているんじゃないでしょうか?
僕もそんな状態なのでこの記事にまとめて理解を深めます。
javascriptのeach系のメソッドってそもそも何があるの?
$のeach
$.each(array, function(index, val) {
//処理
console.log(this) //thisはeach文で回している要素自体を指す
});
使える対象としては
- jQueryオブジェクト
- 配列
- 連想配列
- オブジェクト
があります。なんでも使える感じですね。
// jQueryオブジェクト
$.each($('.target'), function(index, element){
//処理
});
//配列
$.each(array, function(index, value){
//処理
});
//オブジェクト
$.each(object, function(key, value){
console.log(key,value);
});
$のeachではループを抜け出せる
後述するforEach文ではループを抜け出すことはできませんが、こちらでは簡単にループを抜け出すことができます。
return false
とすることでループを抜け出すことができます。
jQueryのeach
$('ターゲット').each(function(index, value){
//処理
});
これは
- jQueryオブジェクト
に対してのみ使うことができます。
forEach
array.forEach(function(val, index, array){
//処理
});
特徴的なのが、第3引数にarray.forEach
で指定したarray
がきているところです。
これってなんでいるのかな・・って言う
jQueryでは、thisは要素を指していましたが、forEachではコールバック内のthisが参照するオブジェクトを指定できます。つまり
array.forEach(function(val, index, array)
このかっこの最後のところのarrayを参照できる。
これ第3引数いらない気がします。
array.forEach(function(val, index){
//処理
});
と書くのが普通に使うのにはいいでしょう。
注意点
forEach文ではループから抜け出すことができません。
なのでforEach文は絶対にループから抜け出したくないときに使うといいかもしれません。
someのeach
ループから抜け出せるタイプのforEachです。
array.some(function(value,index){
if(index==2) return false; // 処理を中断して次のループへ(continueと同じ)
});
ややこしいのが、
return false
で次のループを実行してreturn true
でループ自体を終了すると言うことです。
結局どれがいいの?
jQueryが使える環境では$.eachが最適かなと思っています。
forEachに関しては、jQueryが使えない環境や、ループから絶対に抜け出させたくないときに使うと言う感じでしょうか?
僕が調べた感じではこのような結論に至りましたが、間違いがあればそっと教えていただけると幸いです。