一、问题情况
在实际开发过程中,你获取到的后端数据结构字段可能有,可能没有的情况下,你是否使用过这种场景
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 复制代码