确保 ES6 的 find 方法在属性未定义时不会出错。
确保 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还有其他解决方法吗?
当使用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
这个问题。