确保 ES6 的 find 方法在属性未定义时不会出错。

10 浏览
0 Comments

确保 ES6 的 find 方法在属性未定义时不会出错。

我有这段代码:\n

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

\n我想找出target中是否有1,并且我想要name属性的值。\n我会这样做:\n

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

\n但是如果arr.find(o => target.includes(o.id))没有name属性,它会导致整个应用程序崩溃并抛出错误。\n那么如何确保这不会导致崩溃?我可以这样做,但是很丑陋:\n

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

\n或者我必须映射以确保arr始终具有name属性,如果arr是动态的且数据来自外部方,则必须这样做。\n还有其他解决方法吗?

0
0 Comments

当使用ES6的.find方法时,如果要查找的属性不存在,可能会导致代码出现异常。为了解决这个问题,可以先将.find的结果存储在一个变量中,然后再检查该变量是否定义。如果变量已定义,则将属性值提取出来;否则,将变量赋值为null。

举个例子,假设存在一个数组arr,我们想要找到其中一个对象的属性name,但是不能确定这个属性是否存在。我们可以使用以下代码来解决这个问题:

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

在这个代码片段中,我们先将.find的结果存储在foundObject变量中。接着,我们使用三元表达式来检查foundObject是否已定义。如果已定义,则将foundObject.name的值赋给somethingValue;否则,将null赋给somethingValue

这样做的好处是,我们可以避免因为属性不存在而导致代码出现异常。同时,我们也不需要创建一个额外的对象来提取一个不存在的属性。

希望以上方法能帮助您解决Ensure es6 find don't break when property is not defined这个问题。

0
0 Comments

问题:Ensure es6 find don't break when property is not defined

原因:如果find()返回undefined,那么表达式将求值为{},并尝试从{}获取name,而{}是undefined。

解决方法:使用空对象{}和||运算符。

代码示例:

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

0