object方法_通过实现Lodash方法学习JavaScript——Object

Lodash是一个非常有用的实用程序库,可让我们轻松处理对象和数组。

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

resultfalse 时,我们中断循环。

现在,当我们使用 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

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 对象提供了多个键,并带有一个以 ageactive 属性为值的对象。

然后我们使用它调用 findKey 并将 predicate 函数设置为 o => o.age <40

然后我们得到 'foo' result 的值。

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 函数。

findKeyfindKeyRight 函数可以通过在各个键之间循环然后在其上调用 predicate 函数来实现。


如果对你有所启发和帮助,可以点个关注、收藏、转发,也可以留言讨论,这是对作者的最大鼓励。

作者简介:Web前端工程师,全栈开发工程师、持续学习者。

私信回复大礼包送某网精品视频课程网盘资料,准能为你节省不少钱!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值