对象层级太多需要逐层非空校验时,这样写可以避免这个问题
概述
我们有时候请求后台数据,由于层级过多,有时候不知道有没有某个属性,需要像如下这样逐层非空判断才行,否则会报错。
let res={
name:'haley',
data:{
user:{
username:'哈力'
}
}
}
如果data为undefined时,要获取username时,需要逐层非空判断
let username=res&&res.data&&res.data.user&&res.data.user.username
解决方法
使用迭代器模式写一个迭代器进行获取数据
完整demo
const { log } = console
// 正常数据形式
const res = {
dateTime: '2023-04-09 11:21:41',
data: {
user: {
username: '哈力'
}
}
}
// 无数据时
const resNull = {
dateTime: '2023-04-09 11:21:41',
data:null
}
const objGetter = function (res, key) {
if (!res) return undefined
let result = res
let keys = key.split('.')
for (let i = 0, len = keys.length; i < len; i++) {
if (result[keys[i]] !== undefined&&result[keys[i]] !== null) {
result = result[keys[i]]
} else {
return undefined
}
}
return result
}
log('数据无返回时需要逐层判断 username:',resNull && resNull.data && resNull.data.user && resNull.data.user.username)
log('数据正常时 username:', objGetter(res, 'data.user.username')) //哈力
log('数据无返回时 username:', objGetter(resNull, 'data.user.username')) // undefined
如果您觉得有用,请点赞收藏让更多的同行少走弯路!!!
您的支持将是我不断更新的动力!!
祝所有同行朋友,程序没bug!!!