基本上是一个迭代函数。当您调用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
当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
当iteratee被一个对象调用时,它返回如果对象具有与给定值匹配的关键字,则谓词(返回true或false)。
例如
let is25 = _.iteratee({age: 25});
let isMary25 = is25(mary);
let isDave25 = is25(dave);
匹配iteratee不限于单个属性。它可以采取多个键和值:
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'])
使用迭代
大多数情况下,您不会直接调用iteratee函数。当你调用一个可以迭代的函数时,Lodash会在内部使用这个函数。
例如
let names = _.map(people, 'name'); // => ['mary', 'dave', 'oswald']
这里lodash将调用iteratee
以字符串name
,并用它作为函数来调用地图。
let peopleAged25 = _.filter(people, {age: 25 }); // mary and oswald
这里lodash将调用iteratee
与对象{age: 25}
,并以此为筛选人收藏的功能。
感谢您的简明回答和解释。 – johnwick0831
真棒answer.Very详细 –