Javascript JS:find()属性未定义的句柄

Javascript JS:find()属性未定义的句柄,javascript,typescript,find,ecmascript-2017,Javascript,Typescript,Find,Ecmascript 2017,我有一个从数组中的元素返回值的方法。并非所有元素都具有我要返回的属性。我想使用方法find()在一行中执行此函数。我试过用这种方法来解决这个问题: getExecsFromTour(tourId){ return this.repInfo.find(el => el.id == tourId ).execs || []; } 但是不包含属性execs的元素返回一个undefined错误 为了解决这个问题,我必须将结果存储在一个局部变量中: getExecsFromTour(tourId

我有一个从数组中的元素返回值的方法。并非所有元素都具有我要返回的属性。我想使用方法
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 : [];
}
但是我想知道我是否遗漏了什么,这个功能可以用一句话来实现。

怎么样

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

编辑

var a = [{execs : 1, id:4}, {id:5}];
function getExecsFromTour(tourId, x){
    return (x = a.find(el => 'execs' in el && el.id == tourId )) ? x.execs : [];
}

这一次,我至少运行了几次您似乎已经有了大致的想法,
Array.prototype.find
将在数组中搜索第一个元素,当用作回调参数时,该元素将使回调返回真实值。如果未找到任何内容,则返回
未定义的

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

getExecsFromTour(tourId){
  return (this.repInfo.find(el => el.id == tourId) || {}).execs || [];
}
如果
Array.prototype.find
返回
undefined
,则第一个内括号表达式将被计算为空对象,该对象可以尝试(并且失败)访问
.execs
键,而无
类型错误
,该键也将计算为
undefined
,在这种情况下,函数返回空数组,上面的代码就是这样做的


编辑:有人已经对这个解决方案发表了评论,lol,但正如评论所说,保持多行(这样更可读)没有什么错。

如果你真的需要这是一行,你可以使用
(this.repInfo.find(el=>el.id==tourId)| |{}。execs | |[]让东西在多行上可读并没有什么害处……您好!谢谢@Titus,我完全忘记了
{}
station>。我没有投反对票,但如果你愿意,我可以再给你一张。答案是错的<代码>[{id:'foo',execs:[]}]。查找(el=>'execs'在el&&el.id==''bar')。execs
它仍将抛出相同的错误。您好!是的,有人在回答这个问题之前,但没有人会同意你的解释。非常感谢你!