JavaScript如何动态校验嵌套对象指定层级的属性是否存在
实现嵌套对象属性校验方法
实现思路
沿着传入的属性路径逐层遍历对象,每一层检查当前对象是否存在对应属性,某一级校验不通过直接返回false,全路径遍历完成则返回true。
代码实现
function validateObject(obj, propertyPath) { // 边界处理:根对象本身无效直接返回false if (!obj || typeof obj !== 'object') return false // 边界处理:属性路径为空可根据业务调整返回值,此处默认返回true if (propertyPath.length === 0) return true let currentLevel = obj for (const prop of propertyPath) { // 用原型链方法判断避免对象重写hasOwnProperty或无原型链的异常情况 if (!Object.prototype.hasOwnProperty.call(currentLevel, prop)) { return false } currentLevel = currentLevel[prop] } return true }
注意:传入的属性路径数组元素应为字符串类型的属性名,和对象中定义的属性名保持一致。
效果验证
用你提供的示例对象测试结果如下:
let obj = { "type": "user", "personalDetails": { "firstName": "Steven", "address": { "streetName": "abcd", "zipCode": "012345" } }, "employeeDetails": { "designation": { "id": "1234", "manager": "Mark", } } } validateObject(obj, ['personalDetails']) // 返回true validateObject(obj, ['personalDetails', 'firstName']) // 返回true validateObject(obj, ['personalDetails', 'address', 'streetName' ]) // 返回true validateObject(obj, ['personalDetails', 'address', 'streetName', 'anyObj' ]) // 返回false
内容的提问来源于stack exchange,提问作者user2281858
相关产品推荐
相关产品推荐

