reduce函数在后端数据结构不确定性情况下的使用

237 阅读1分钟

一、问题情况

在实际开发过程中,你获取到的后端数据结构字段可能有,可能没有的情况下,你是否使用过这种场景

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