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

一、问题情况

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

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
    复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值