LoginSignup
5
6

More than 5 years have passed since last update.

[lodash] 総乗メソッド_.prodと_.prodByを追加する

Last updated at Posted at 2016-02-19

問題

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
5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6