けさらんぱさらん

方向性は定めず、ただ思いつくままに

JavaScriptのfilterとmap

JavaScriptのArrayオブジェクトにはfilterとmapというメソッドがあります。
ECMAScript5で追加されたみたいなんですけど最近知りました(汗

filterは、LINQで言うWhereメソッドです。
こんな感じです。

var array = [1,2,3,4,5,6,7,8,9,10];

array.filter( function(x){ return x % 2 == 0} )
    .forEach( function(x) { 
        document.write(x);
        document.write("<br />");
    });

結果はこうなります。
f:id:cer1974:20130407230617p:plain

mapの方は、LINQで言うSelectメソッドです。
filterにつなげてみます。

var array = [1,2,3,4,5,6,7,8,9,10];

array.filter( function(x){ return x % 2 == 0} )
    .map( function(x){ return x * x } )
    .forEach( function(x) { 
        document.write(x);
        document.write("<br />");
    });

結果はこうなります。
f:id:cer1974:20130407231308p:plain

for文などのループ処理よりは処理内容が明確になるし良いと思うんですが
実はこれらは、内部で新しい配列を作成して返しているので
効率的な観点で行くとよろしくないのです。
まあよほど大きな配列でなければ気にしなくてもいいんでしょうけどね
できれば外部イテレータにしてほしかった。