2017-12-12 8 views
5

私はlodash filterのドキュメントを見てきましたが、3番目のパラメータがコンテキストであるかどうかは不明です。lodashのフィルタ関数はコンテキストをとっていますか?

私はcytoscapeプラグイン(dagre)を使用していますが、それは3引数としてthisを渡しているようです。フィルタメソッドが呼び出される前に実行を一時停止すると、thisが定義されます。しかし、thisのコールは未定義です。

私はunderscore filterのドキュメントを見ましたが、3番目の引数をコンテキストとみなしています。だから私はちょっと、プラグインが最初にアンダースコアを使用していて、おそらくlodashに変更されたと推測しています。私が取り組んでいるプロジェクトはlodashを使用しています。

thisがその時点でnullである理由を理解できません。それはプロジェクト特有のものかもしれませんが、私はlodashのフィルタの3番目のパラメータについて明確にしたいだけです。

lodashのフィルタの定義は、アンダースコアのフィルタとまったく同じですか?ドキュメンテーションからはそうは思われません。

+0

第3のパラメータは、lodashの 'filter'メソッドに第3の​​パラメータがありません。 –

+0

@chsdkええと...あなたはアンダースコアをロダッシュに置き換えることができると思ったでしょう。しかし、アンダースコアは3番目のパラメータを取ることができますが、lodashは3番目のパラメータを取ることができます。 – Touch

+2

Lodash 3 'filter'は3番目のコンテキストパラメータを持っています。これはLodash 4で削除されました。 – Tushar

答えて

2

残念ながらlodash filter methodは、underscore filter methodとは異なり、context引数のためのオプションを提供していません:

引数を

  • colle ction(Array | Object):反復処理を行うコレクションです。
  • [述語= _。identity](関数):反復ごとに呼び出される関数。あなたは何ができるか

はこのように、希望contextオブジェクトにコールバック関数をバインドする.bind() methodを使用することです:

_.filter(array, callback.bind(context)); 

注意:Javascriptが持っていることを

注意それ自身既にこのオプションを提供しているArray#filter() methodです。

3

まあ、Function.prototype.bindを使用して自分のコンテキストを定義できます。それは2つだけの引数取るよう

_.filter([…], 
    function (o) { 
    console.log(this.id); //100 
    //than return something based on o 
    return o.active 
    }.bind({id: 100}) 
); 

Doc on mdn

+0

あなたは答えることもできます。上に投票した。他のものを選んだのは、lodashのフィルタメソッドがアンダースコアのフィルタメソッドと異なるということです。しかし、答えに感謝します。感謝します :-) – Touch

関連する問題