lodash中iteratee的用法(用好iteratee提高生产效率)

前言

lodash 中有一套自己的迭代器,那就是 iteratee ,很多地方都需要用到,官方文档说的也很云里雾里,那究竟是怎么一回事呢?

iteratee

先看对 iteratee 的定义:

[iteratee=_.identity] (Array|Function|Object|string)

可取四种类型。

string

来看一个 _.groupBy() 的例子:

	// The `_.property` iteratee shorthand.
	_.groupBy(['one', 'two', 'three'], 'length');
	// => { '3': ['one', 'two'], '5': ['three'] }

_.groupBy() 的作用是根据第二个参数传入的 iteratee 定义的规则进行分组,这里使用了 string 的 iteratee 。

显而易见,传入 string 就等同于:

	_.groupBy(['one', 'two', 'three'], o => o.length);

按官方的

The _.property iteratee shorthand

来说,传入字符串还等同于使用了 _.property 的简写,来看一下 _.property 的定义:

_.property(path)

创建一个返回给定对象的 path 的值的函数。

path (Array|string): 要得到值的属性路径。

也就是取 path 上的值而已,总结一下:

使用 string 等价于使用对象的 path 上的值。

array

来看一个例子:

	// The `_.matchesProperty` iteratee shorthand.
	_.find(users, ['active', false]);
	// => object for 'fred'

_find() 函数的作用是根据第二个参数传入的 iteratee 定义的规则来寻找第一个返回真值的元素。

我们关注的重点不是 _.find() 怎么用,也不是 users 是什么对象,我们需要知道 array 形式的 iteratee 是什么!

实际上,array 形式的 iteratee 等同以下函数:

	_.find(users, o => o.active === false);

按官方的话来说,array 形式的 iteratee 也是 _.matchesProperty 的简写,来看一下 _.matchesProperty 的定义:

_.matchesProperty(path, srcValue)

创建一个深比较的方法来比较给定对象的 path 的值是否是 srcValue 。 如果是返回 true ,否则返回 false 。

path (Array|string): 给定对象的属性路径名。
srcValue (*): 要匹配的值。

说白了刚刚我们使用 string 是取 path 上的值,而这里是把 path 上的值取出来做比较而已。

总结一下:

array 形式的 iteratee 等同于取 path 上的值做比较。

object

来看一个例子:

	// The `_.matches` iteratee shorthand.
	_.find(users, { 'age': 1, 'active': true });
	// => object for 'pebbles'

有了刚刚的经验,相信这里应该很快就能脱口而出,object 形式的 iteratee 等同于 _.matches 函数的缩写,来看一下 _.matches 函数的作用:

_.matches(source)

创建一个深比较的方法来比较给定的对象和 source 对象。 如果给定的对象拥有相同的属性值返回 true,否则返回 false。

source (Object): 要匹配属性值的源对象。

他就相当于在 users 里去遍历每一个元素,这个元素一定要满足有你给的 object 形式的 iteratee 里面相同的 key 和 value ,这个元素可以有更多的 key 和 value,但是你给的 object 里的 key 和 value 必须有。

那么符合这样条件的第一个元素会被 _.find 出来。

function

这个是大家老生常谈用的了,都熟悉得很。

总结

什么是 iteratee

  1. 传 string 是直接返回 path 上的值 <=> _.property

  2. 传 array 是把 path 上的值做比较 <=> _.matchesProperty

  3. 传 object 是去 match 匹配看看你给的 key 和 value 都有没有,可以比你给的多,但是不能少 <=> _.matches

  4. 传 function 你懂的

附:lodash 中文文档

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值