一、问题情况
在实际开发过程中,你获取到的后端数据结构字段可能有,可能没有的情况下,你是否使用过这种场景
obj1 && obj1.obj2 && obj1.obj2 && obj1.obj2.obj3
其实这是一种很常见的处理数据结构不完整性,这样如果数据嵌套层数多了,写的很费劲
二、使用reduce
函数写一个工具函数
- 1、基本的数据
let obj1 = {
"result": {
"report": {
"contactInfo": {
"callsNumber": 0,
"contactsNumber": 0,
"emergencyContactHasOverdue": "No",
"sameLiainson": {
"isSame": "Yes",
"accounts": "aa"
}
}
}
}
}
- 2、工具函数
const objectGetVal = (obj, expr) => {
if (!Object.is(Object.prototype.toString.call(obj), '[object Object]')) {
throw new Error(`${obj}不是对象`);
}
if (!Object.is(Object.prototype.toString.call(expr), '[object String]')) {
throw new Error(`${expr}必须是字符串`);
}
return expr.split('.').reduce((prev, next) => {
if (prev) {
return prev[next]
} else {
return undefined;
}
}, obj)
}
- 3、测试使用
console.log(objectGetVal(obj1, 'result.report.contactInfo.emergencyContactHasOverdue'));
console.log(objectGetVal(obj1, 'result.report.emergencyContactHasOverdue'));
// 输出结果
// No
// undefined