lodash - 你能用英语解释一下 Lodash Iteratee 函数吗?

标签 lodash

我试图弄清楚 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/

相关文章:

javascript - Lodash/underscore 函数使用给定长度的默认空值初始化数组

javascript - 将嵌套数组的第一个元素指定为父对象的属性

JavaScript/lodash 数据转换

javascript - Angular : sort collection by list of values

javascript - lodash - 如何 _.trim 对象数组?

javascript - 如何使用 Lodash 对 JSON 数据进行子级过滤

javascript - 如何将包含对象的对象转换为对象数组

javascript - 为什么 lodash union 会打乱我的对象?

javascript - 使用 Lodash/Javascript 过滤嵌套数组

javascript - 如何按日期对对象进行分组?