首页 > 解决方案 > JS:使用 find() 属性未定义的句柄

问题描述

我有一个从数组中的元素返回值的方法。并非所有元素都具有我想要返回的属性。我想使用该方法用一行来执行此功能find()。我试过这种方法来解决它:

getExecsFromTour(tourId){
 return this.repInfo.find(el => el.id == tourId ).execs || [];
}

但是不包含该属性的元素会execs返回错误undefined

为了解决这个问题,我不得不将结果存储在一个局部变量中:

getExecsFromTour(tourId){
    let items       = this.repInfo.find(el => el.id == tourId);
    return items    != undefined ? items.execs : [];
}

但是我想知道我是否遗漏了什么,这个功能可以用一句话来实现。

标签: javascripttypescriptfindecmascript-2017

解决方案


您似乎有一般的想法,Array.prototype.find将在数组中搜索第一个元素,当用作回调的参数时,回调将返回一个真实值。如果没有找到,则返回undefined

您的代码应该可以工作,但是是的,在一行中执行此操作的一种方法(如果您愿意)是使用:

getExecsFromTour(tourId){
  return (this.repInfo.find(el => el.id == tourId) || {}).execs || [];
}

如果Array.prototype.find返回undefined,第一个内部括号表达式将被评估为空对象,它可以尝试(并且失败)访问.execs没有 a 的键TypeError,这也将评估为undefined,在这种情况下,函数返回空数组,这就是你上面的代码做。

编辑:有人已经评论了这个解决方案,大声笑,但正如评论所说,保持多行没有错(这样更具可读性)。


推荐阅读