我试图弄清楚 Lodash iteratee 的工作原理以及我将在哪里使用它。
The documentation says:
Creates a function that invokes func with the arguments of the created function. If func is a property name, the created function returns the property value for a given element. If func is an array or object, the created function returns true for elements that contain the equivalent source properties, otherwise it returns false.
这是文档中的示例之一,但是我在解决这个问题时遇到了一些麻烦。
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 }]
最佳答案
iteratee 基本上是一个函数。当您调用 lodash 的 iteratee function 它返回一个可以在以后的代码中使用的函数。
有 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与对象一起调用时,如果对象具有与给定值匹配的键,则返回谓词(返回真或假)。
例如
let is25 = _.iteratee({age: 25});
let isMary25 = is25(mary);
let isDave25 = is25(dave);
匹配项迭代不限于单个属性。它可以采用多个键和值:
let isFemaleAged25 = _.iteratee({gender: 'female', age: 25});
3.匹配属性迭代
这类似于matches iteratee,但在iteratee 时创建。使用一组键和值调用。
is25
上面创建的函数也可以这样创建:let is25 = _.iteratee(['age', 25]);
属性也可以是键的路径,这是使用匹配迭代器无法完成的:
let isTeacherAged25 = _.iteratee(['age', 25, 'job.title', 'teacher'])
使用迭代器
大多数时候你不会调用iteratee直接发挥作用。当你调用一个可以接受迭代的函数时,Lodash 将在内部使用该函数。
例如
let names = _.map(people, 'name'); // => ['mary', 'dave', 'oswald']
这里lodash会调用
iteratee
使用字符串 name
并将其用作调用map的函数。let peopleAged25 = _.filter(people, {age: 25 }); // mary and oswald
这里lodash会调用
iteratee
与对象 {age: 25}
并将其用作过滤人员集合的功能。
关于lodash - 你能用英语解释一下 Lodash Iteratee 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43384596/