jQueryにreduceがなかったので書いた

jQueryには、普通の配列にも使えるeachやmapがあるのですが、残念なことに、畳み込み演算できるreduceがありません。というわけで、こんなことしました。

$.reduce = function(list, func, init){
    var r = init;
    for(var i = 0; i < list.length; i++) {
        if(i == 0 && init == undefined) {
            r = list[i];
        }
        else {
            r = func.call(r, list[i]);
        }
    }
    return r;
};

これで、またさらに関数的にプログラミングできます。

$.reduce([1,2,3,4], function(e){ return this + e; });
// => 10

$.reduce([["<","&lt;"],[">","&gt;"]], function(e){
    return this.replace(e[0], r[1]);
}, ">v<");
// => "&gt;v&lt;"

あまり使う人はいないかもしれないけど、たったこれだけのコードなんだし、最初から入れておいてくれても良かったのに。reduceを直接使う機会は少ないけど、合成していろんな関数作る元になるんだけどなぁ。