2017-04-13 16 views
8

私はLodash iterateeがどのように動作するのか、どこで使うのかを考えようとしています。Lodash Iterateeの機能を英語で説明できますか?

ドキュメントは言う:

が作成した関数の引数を持つFUNCを起動する機能を作成します。 funcがプロパティ名の場合、作成された関数は指定された要素のプロパティ値を返します。 funcが配列またはオブジェクトの場合、作成された関数は同等のソースプロパティを含む要素に対してtrueを返し、そうでない場合はfalseを返します。

これはドキュメントの例の1つですが、私はこの問題を回避するためにいくつかの問題を抱えています。

var users = [ 
    { 'user': 'barney', 'age': 36, 'active': true }, 
    { 'user': 'fred', 'age': 40, 'active': false } 
]; 

// The `_.matches` iteratee shorthand. 
_.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); 
// => [{ 'user': 'barney', 'age': 36, 'active': true }] 

答えて

17

基本的には、関数のiterateeです。 lodashのiteratee関数を呼び出すと、後でコードで使用できる関数が返されます。

例のコードで次のオブジェクトを使用して、説明する3つの異なるタイプのイテレータがあります。 iterateeが文字列で呼び出されると

let mary = { 
    name: 'mary', 
    gender: 'female', 
    age: 25, 
    job: { 
     title: 'teacher', 
     salary: 10000 
    } 
} 

let dave = { 
    name: 'dave', 
    gender: 'male', 
    age: 27 
} 

let oswald = { 
    name: 'oswald', 
    gender: 'male', 
    age: 25 
} 

let people = [mary, dave, oswald]; 

1.プロパティ

をiteratee、それは与えられた文字列のキーを持つオブジェクトのプロパティを返す関数を返します。

let getAge = _.iteratee('age'); 

私たちはここで終わることは 対象の年齢プロパティを返す関数です。

function getAge(object){ 
    return object['age']; 
} 

だから我々は、人々の年齢を返すためにgetAgeを使用することができます:に似た何か

let marysage = getAge(mary); 
let davesage = getAge(dave); 

文字列はまた、財産へのパスを指定できます

let jobtitle = _.iteratee('job.title'); 

2。それに一致します

iterateeがオブジェクトと共に呼び出されると、オブジェクトが指定された値と一致するキーを持つ場合、述語(trueまたはfalseを返します)。

let is25 = _.iteratee({age: 25}); 

let isMary25 = is25(mary); 
let isDave25 = is25(dave); 

iterateeは1つのプロパティに限定されません。これは、複数のキーと値をとることができます。

let isFemaleAged25 = _.iteratee({gender: 'female', age: 25}); 

3.プロパティiteratee

これはiterateeマッチに似ていると一致しますが、iterateeは、キーと値の配列で呼び出されたときに作成されます。

上記で作成したis25機能もそれほどのように作成することができます。

let is25 = _.iteratee(['age', 25]); 

プロパティもキーへのパスを指定でき、マッチを使用して行うことができない何かをiteratee:

let isTeacherAged25 = _.iteratee(['age', 25, 'job.title', 'teacher']) 

iterateesの使用

ほとんどの場合、iteratee関数を直接呼び出すことはありません。 Lodashは、iterateeを取ることができる関数を呼び出すときにこの関数を内部的に使用します。

ここでlodash

let names = _.map(people, 'name'); // => ['mary', 'dave', 'oswald'] 

は、文字列 nameiterateeを呼び出し、マップを呼び出すための関数として使用します。ここでlodash
let peopleAged25 = _.filter(people, {age: 25 }); // mary and oswald 

は、オブジェクト {age: 25}iterateeを呼び出し、人々のコレクションをフィルタリングする機能として使用します。

+0

簡潔な回答と説明に感謝します。 – johnwick0831

+1

すばらしい答え。非常に詳細 –