You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:09:04