自分のカスタム関数をlodashのチェーンに入れる方法はありますか?したがって、このような例:カスタム関数でロダッシュのチェーンを作成する
var l = [1,2,3]
var add = function(a, b){return a+b}
var r =_.chain(l).find(function(a){return a>1}).add(5).value()
=>r = 7
自分のカスタム関数をlodashのチェーンに入れる方法はありますか?したがって、このような例:カスタム関数でロダッシュのチェーンを作成する
var l = [1,2,3]
var add = function(a, b){return a+b}
var r =_.chain(l).find(function(a){return a>1}).add(5).value()
=>r = 7
何を見てすることはlodashプロトタイプを拡張する方法です。 mixinユーティリティー機能で簡単にやり遂げることができます。ドキュメントにここで確認してください:それは次のようになりますあなたの例では http://lodash.com/docs#mixin
:
var l = [1,2,3];
var add = function(a, b){return a+b}
_.mixin({
add: add
});
var r =_.chain(l).find(function(a){return a>1}).add(5).value()
console.log(r); ==> 7
、ここでは、ライブでフィドルのサンプル:http://jsfiddle.net/g2A9C/
私はより一般的な思い付いた@stride anwswer後_.mixin
を使用したソリューション:
function add(a, b, c) {
return a + b + c
}
function sub(a, b, c) {
return a - b - c
}
_.mixin({
run: function (v, f) {
var args = Array.prototype.slice.call(arguments, 2)
args.unshift(v)
return f.apply(this, args)
}
})
var r = _.chain(1).run(add, 1, 1).run(sub, 2, 2).value()
console.log(r) -> -1
1 + 1 + 1 - 2 - 2 = -1
結局のところ、私はこれがなぜlodashの機能を構築しているのだろうと思っていません。
もう1つの選択肢は、連鎖を落とし、機能の構成を活用することです。_.flow
。 DOCSから
:
【フロー】この各 連続呼び出しが戻り値を供給され作成された関数の結合を有する所定 関数を呼び出した結果を返す関数を作成します以前。
これは、Flow内のすべての関数が前のものの出力を入力として受け取ることを意味します。実際には、これはLodash APIメソッドだけに限定されないことを意味しますが、次のAPIが返す値を処理できる限り、私たちが気に入っている機能を混在させて一致させることができます。
var l = [1,2,3]
var add = _.curry((a, b) => a + b);
_.flow(
_.find(a => a > 1),
add(5),
)(l);
// => 7
NB - あなたは望んでいないか、あなたはまだ同じ結果を得ることができるものを使用できない場合、この例では、Lodashの機能バージョンを使用して、my other answer to another question about Lodashを確認してください。
これは、組み込み関数では、 '_.map'を含み、' _.partial'を必要に応じて組み合わせる方法があります: ' ' _(arr).map(_。partial(add、 _、1)) ' – aaron