首页 > 解决方案 > [0] 在过滤器方法的末尾传递了什么?

问题描述

我在做 udemy 课程时得到了这个代码,但没有正确得到它。在过滤器方法末尾传递的 [0] 有什么作用,它的用途是什么?

let getUser = this.globalRoom.filter((userId) => {
  return userId.id === id;
})[0]

标签: javascriptarraysecmascript-6filter

解决方案


作为filter返回一个仅包含通过回调检查的项目的数组,[0]为您提供此类列表中的第一项。

然而,这是一个反模式,因为这里工作的正确工具是find,原因如下:

  • filter不断循环整个数组,即使你只对它的第一个结果感兴趣
  • find准确返回第一个结果,并停止循环数组,无需访问其第一个索引

因此,这是做完全相同的事情的更好方法:

let getUser = this.globalRoom.find((userId) => {
  return userId.id === id;
});

并且您应该检查它是否getUser返回一个值,因为 asfilter可能是一个空数组,因此访问它的索引0将返回未定义,如果没有满足条件匹配一次,find也会返回。undefined


推荐阅读