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
}
}
js不用插件如何判断嵌套深层对象是否存在某个属性
最新推荐文章于 2024-05-09 20:08:01 发布