Lodash是一个非常有用的实用程序库,可让我们轻松处理对象和数组。
![5f73137a6cc119fa9c87473d168d72b1.png](https://img-blog.csdnimg.cn/img_convert/5f73137a6cc119fa9c87473d168d72b1.png)
Lodash
但是,现在JavaScript标准库正在赶上Lodash之类的库,我们可以用简单的方式实现许多功能。
在本文中,我将介绍一些Lodash对象方法,这些方法可以用纯JavaScript实现。
forInRight
forInRight 方法以相反的顺序循环遍历对象的自身和继承的属性。在每次迭代中,它将使用value、key 和 object 参数调用 iteratee 函数,直到返回 false 为止。然后循环将结束。
value 是要遍历的对象属性的值,key 是要遍历的属性的键,object 是要遍历属性的对象。
我们可以通过使用 for...in 循环来实现,按照返回的顺序获取所有的键,并将其放入数组中。
然后,我们可以通过调用数组实例的 reverse 方法来反转键,并使用 for ... of 循环遍历键:
const forInRight = (object, iteratee) => { const keys = []; for (const key in object) { keys.push(key); } const reversedKeys = keys.reverse(); for (const key of reversedKeys) { const result = iteratee(object[key], key, object); if (result === false) { break; } }}
在上面的代码中,我们首先使用 for ... in 循环遍历对象的键,并将它们全部放入 keys 数组。
在 for ... in 循环中,我们将key推入 keys 数组。然后,我们通过调用 reverse 来反转 keys 数组中的key,然后将反转的数组分配为 reversedKeys 的值。
然后,我们可以使用 for ... of 循环遍历 reversedKeys ,然后使用 object [key],key 和 object 调用 iteratee。我们将 iteratee 的返回值分配给 result。
当 result 为 false 时,我们中断循环。
现在,当我们使用 Foo 构造函数调用它时,如下所示:
function Foo() { this.a = 1; this.b = 2;}Foo.prototype.c = 3;forInRight(new Foo(), (value, key) => console.log(key));
我们得到返回 c,b 和 a 作为该记录值的顺序。
![77b3171a11995c95301bf3473ea54e18.png](https://img-blog.csdnimg.cn/img_convert/77b3171a11995c95301bf3473ea54e18.png)
findKey
Lodash findKey 查找 predicate 返回 true 的对象的第一个属性。
我们可以通过遍历对象的项并调用 predicate 函数来检查给定的属性值是否与 predicate 返回的条件匹配,从而实现该目的。
例如,我们可以如下实现:
const findKey = (object, predicate) => { for (const key of Object.keys(object)) { if (predicate(object[key])) { return key } }}
在上面的代码中,我们使用 Object.keys 来获取object自己的键。然后,我们使用 for ... of 循环遍历键。
在循环内部,我们用对象的值调用 predicate,以查看其是否满足 predicate 函数中定义的条件。
然后,当我们运行 findKey 函数时,如下所示:
const users = { 'foo': { 'age': 15, 'active': true }, 'bar': { 'age': 30, 'active': false }, 'baz': { 'age': 1, 'active': true }};const result = findKey(users, o => o.age < 40);
我们为 users 对象提供了多个键,并带有一个以 age 和 active 属性为值的对象。
然后我们使用它调用 findKey 并将 predicate 函数设置为 o => o.age <40。
然后我们得到 'foo' 是 result 的值。
![96ad139126b860d1e161db7f7ef4ac05.png](https://img-blog.csdnimg.cn/img_convert/96ad139126b860d1e161db7f7ef4ac05.png)
findLastKey
Lodash的 findLastKey 函数类似于 findKey ,不同之处在于keys以相反的顺序循环。
为了实现它,我们可以通过在 Object.keys 返回的 keys 数组上调用 reverse 方法来更改 findKey 实现。
我们可以这样做,如下所示:
const findLastKey = (object, predicate) => { for (const key of Object.keys(object).reverse()) { if (predicate(object[key])) { return key } }}
然后,我们如下调用 findLastKey 函数:
const users = { 'foo': { 'age': 15, 'active': true }, 'bar': { 'age': 30, 'active': false }, 'baz': { 'age': 1, 'active': true }};const result = findLastKey(users, o => o.age < 40);
我们将 'baz' 作为 result 的值而不是 'foo',因为我们以相反的方式循环遍历这些键。
总结
forInRight 方法可以通过以下方式实现:将自身和继承的对象放入数组中,方法是使用 for ... in 循环遍历它们,然后将它们推入数组中。
然后,我们可以使用 for ... of 循环遍历它们,并在其上调用 iteratee 函数。
findKey 和 findKeyRight 函数可以通过在各个键之间循环然后在其上调用 predicate 函数来实现。
如果对你有所启发和帮助,可以点个关注、收藏、转发,也可以留言讨论,这是对作者的最大鼓励。
作者简介:Web前端工程师,全栈开发工程师、持续学习者。
私信回复:大礼包,送某网精品视频课程网盘资料,准能为你节省不少钱!