为了账号安全,请及时绑定邮箱和手机立即绑定

如何优雅的处理函数式调用中的undefined

如何优雅的处理函数式调用中的undefined

繁星淼淼 2018-12-16 15:33:54
例子: 根据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) // '-'


查看完整回答
反对 回复 2018-12-16
  • 1 回答
  • 0 关注
  • 361 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信