确保在未定义属性时es6查找不会中断

时间:2019-05-17 09:49:54

标签: javascript reactjs ecmascript-6

我有此代码

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

const target = [1]

我要查找目标是否具有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是动态的并且南方是来自外部政党,则必须这样做。

还有其他解决方法吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

如果find()返回undefined,则表达式的结果将为{},并尝试从name的{​​{1}}获取{} < / p>