問題
lodashは多くの便利なメソッドを提供してくれるJavaScriptのユーティリティライブラリである。
しかしながら、本記事執筆時点の最新版であるlodash 4.5.0では、総和を行うメソッドである_.sum
と_.sumBy
は提供されているものの、総乗を行うメソッドは存在しない。
そこで、総乗を計算する独自拡張メソッド_.prod
と_.prodBy
を追加し、これを既存のメソッド_.sum
や_.sumBy
と同じような感覚で使えるようにしたいのだがどうすればよいか。
解決策
lodashは_.mixin
という、ライブラリ利用者がlodashを独自に拡張できる仕組みを用意しており、これを利用するとlodashに独自拡張メソッドを安全に追加することができる。
_.mixin({
prod: function (array) {
return _.prodBy(array, _.identity);
},
prodBy: function (array, iteratee) {
var iterateeFunc = _.iteratee(iteratee);
return array.reduce(function (prod, element) {
return prod * iterateeFunc(element);
}, 1);
}
}, {chain: false});
使用例
_.prod([4, 2, 8, 6]); // → 384
_([4, 2, 8, 6]).prod(); // → 384
var objects = [{n: 4}, {n: 2}, {n: 8}, {n: 6}];
_.prodBy(objects, function (o) { return o.n; }); // → 384
_.prodBy(objects, "n"); // → 384
_(objects).prodBy(function (o) { return o.n; }) // → 384
_(objects).prodBy("n") // → 384