js不用插件如何判断嵌套深层对象是否存在某个属性

        let a1 = { b: { c: { d: { e: 1 } } } }
        let a2 = { c: { d: { e: 1 } } }
        let a3 = { d: { e: 1 } }
        let rst1 = judgeDeep(a3, 'd.e')
        console.log(rst1);
        //为啥需要这样函数,因为嵌套函数,需要判断上一层对象存在才能继续访问子对象,不然会报错
        function judgeDeep(parent, attrStr) {
            //通过try-catch来捕捉访问对象失败情况--这是解决嵌套对象重要一步,这样就可以大胆访问对象--这也是封装原因
            //不封装情况1.访问对象出错,try-catch捕捉到,在catch进行访问对象错误处理
            //不封装情况2.如果在情况1下,又有多个属性需要进行这样处理,就会需要写多个catch处理,代码可观性上就别封装的差
            try {
                let attrArray = attrStr.split('.')
                let currObj = !!attrStr ? parent[attrArray[0]] : parent//不输入查找属性,默认返回整个对象
                return attrArray.length <= 1 ? currObj : judgeDeep(currObj, attrArray.slice(1).join('.'))//迭代访问对象
            }
            catch (e) {
                return undefined
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值