例子: 根据id获取一个对象数组中的某个对象的属性const stage = [
{ id: 0, name: 'a' },
{ id: 1, name: 'b' },
{ id: 2, name: 'c' },
{ id: 3, name: 'd' },
{ id: 4, name: 'e' },
]// 写法1:// 存在的问题:如果没有找到对象,find()就会返回undefined,导致获取name属性的时候会报错。let name = stage.find(v => v.id ===id).name// 写法2:// 存在的问题:重复计算let name = stage.find(v => v.id ===id) ? stage.find(v => v.id ===id).name : '';// 写法3:// 存在的问题:需要引入额外的步骤let find = stage.find(v => v.id ===id)let name = find && find.name期望希望像写法1那样一行完成所有方法的调用同时能避免中间方法 返回undefined 而出错的问题。
1 回答
呼唤远方
TA贡献1856条经验 获得超11个赞
用解构赋值+默认参数+||取值:
let {name='-'} = stage.find(v => v.id ===8)||{}
右边的stage.find(v => v.id ===8)||{}
返回找到的对象或者一个空对象
左边let {name}
解构赋值有软失败
的特点,如果右边没有找到导致右边是空对象,name
就是undefined
但是左边又有默认值,所以如果没有找到,name
的结果是-
({name='-'}=stage.find(v => v.id ===1)||{})console.log(name) // b({name='-'}=stage.find(v => v.id ===1)||{})console.log(name) // '-'
添加回答
举报
0/150
提交
取消