JavaScriptの配列の反復メソッド
mapやfilterといったメソッドを使うと配列の処理をループじゃなくてクロージャですっきり書けるようになるので便利。
リファクタリングで言うところの「ループからコレクションクロージャメソッドへ」
ただしJavaScript1.6又は1.8で追加されたものなのでそれらに対応した実装上でないと使えない。
ブラウザではIEやOperaが1.5までしか対応してないのでブラウザ上の世界では実質使えないようだ。(jQueryなどのライブラリに頼れば使える)
TitaniumやNode.jsでは思いっきり使えるのでとても良い。
map、forEach、filter、every、someなどには以下のようなかんじで関数を渡す。
[1,2,3].map(function(e){return e * 2}); // #=> [ 2, 4, 6 ]
必要であればindexと配列も渡して処理できる。
[1,2,3].map(function(e, i, array){return e * array[i]}); // #=> [ 1, 4, 9 ]
reduceとreduceRightだけ引数の取り方が違う。
[1,2,3,4,5].reduce(function(tmp, e){return e + tmp}); // #=> 15
[1,2,3,4,5].reduce(function(tmp, e, i, array){return array[i] + tmp}); // #=> 15
reduceのやってることはRubyのinjectと同じ。
TitaniumはJavaScript1.6対応と聞いたので1.8から追加のreduceは使えないのかと思ったが、試してみたら何食わぬ顔で動いた。いい感じじゃなイカ。