确保未定义属性时 es6 find 不会中断 [重复]

Posted

技术标签:

【中文标题】确保未定义属性时 es6 find 不会中断 [重复]【英文标题】:Ensure es6 find don't break when property is not defined [duplicate] 【发布时间】:2019-10-04 15:16:21 【问题描述】:

我有这个代码

const arr = [
  id: 1,
  name: 'anything'
, 
  id: 2,
  name: 'something'
]

const target = [1]

我要查找target是否为1,我要name属性值

我会的

arr.find(o => target.includes(o.id)).name

但如果

arr.find(o => target.includes(o.id)) 没有name 属性,它会破坏整个应用程序并引发错误。

那么如何确保它不会崩溃呢?我可以这样做,但它很难看

const somethingValue = arr.find(o => target.includes(o.id)) && arr.find(o => target.includes(o.id)).name

或者我必须映射以确保 arr 始终具有 name 属性,如果 arr 是动态的并且南方来自外部方,我必须这样做。

还有什么办法可以解决吗?

【问题讨论】:

【参考方案1】:

您可以使用空对象|| 运算符。

(arr.find(o => target.includes(o.id)) || ).name

如果find() 将返回undefined,则表达式将评估为 并尝试从 获取name,即undefined

【讨论】:

【参考方案2】:

先将.find的结果提取到一个变量中,然后检查该变量是否被定义:

const foundObject = arr.find(o => target.includes(o.id));
const somethingValue = foundObject ? foundObject.name : null;

【讨论】:

是的,我知道,但这是一个两步的事情 不要害怕定义变量——没有必要为了提取不存在的属性而创建额外的对象

以上是关于确保未定义属性时 es6 find 不会中断 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

动画中断时未调用 UIView 动画完成块

查找数据时无法读取未定义的属性“查找”

确保dynamic_cast不会导致未定义的行为C ++

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

为啥在弗雷德弗林斯顿之后警报显示未定义? ES6 中的“const”都有哪些属性? [复制]

ES6模块和CommonJSAMD本质区别思考