2016-05-25 15 views
1

私はLodash/Underscoreのいくつかの方法に慣れており、構文について基本的な質問があります。バニラJS構文よりもLodash/Underscore構文の構成上の利点


私はユーザーオブジェクトのリストを持っており、その年齢40未満であるそれらのユーザーがリストをフィルタリングしたい場合は、私は以下のバニラJavaScriptを書くことができます。

// Vanilla JS 
var result = users.filter((d) => d.age < 40); 

LoDash /下線の申し出

// Lodash, Underscore 
var result = _.filter(users, (d) => d.age < 40); 

これらの両方が同じ結果を生成し、配列を返します。

もしあれば、後者の構文を使用することによる構成上の利点は何ですか?プレーンなJS構文を使用する方が望ましい理由は何ですか?


編集

に私は「1は、追加のライブラリを必要とし、1にはない」と「彼らは別のコードを実行する」などの答えを受けていますので、私は明確にしたいです。

function compositionの観点から、バニラJS法よりもロダッシュ/アンダースコア法を使用する利点はありますか?

+1

まあ、前者を使うと、ライブラリを使うのではなく、バニラJSで書いています。バニラごとの依存性:0。したがって*利点*は相対的なものです。これは単にライブラリ対バニラであるためです。 jQueryとバニラの違いはありません。あなたの毒を選ぶ。 – Marcus

+0

申し訳ありませんが、私はより具体的であったはずです。私は、コンポジションの観点から利点を探しています。 – Himmel

+0

違いは、ライブラリの関数を使用し、もう一方はバニラJS関数を使用することです。彼らは別のコードを実行しています(この場合はまったく同じことです)。 –

答えて

2

composeがあるとします。

function compose(f, g) { 
    return function apply(...args) { 
    return g(f(...args)); 
    } 
} 

これを使用すると、2つの機能を組み合わせて1つの機能を作成できます。

const inc = x => x + 1; 
const double = x => x * 2; 

const doubleAndInc = compose(double, inc); 
doubleAndInc(3) // 7 
const incAndDouble = compose(inc, double); 
doubleAndInc(3) // 8 

は、彼らが唯一の彼らの引数に依存しているため、これらの機能は、構成することができます。 Lodashのfilter関数についても同様です。

const filterFirst = compose(_.filter, _.head); 
filterFirst([1, 2, 3], x => x % 2 == 0); // 2 

Array.prototype.filterは、配列を引数として呼び出されません。代わりに、内部のthisの値を使用します。通常は、このメソッドが呼び出された配列になります。

compose関数は、thisについて何も知らない。これは引数と戻り値でのみ機能します。つまり、引数の代わりにthisに依存する関数を作成することはできません。

+0

をチェックしてください。探していたポイントツーポイントの回答に感謝します。 – Himmel

関連する問題