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

JavaScript如何编写校验对象指定父节点下是否存在对应子键的函数

功能实现需求

现有如下JavaScript对象:

let obj = {
  "type": "user",
  "personalDetails": {
    "firstName": "Steven",
    "address": {
      "streetName": "abcd",
      "zipCode": "012345"
    }
  },
  "employeeDetails": {
    "designation": {
      "id": "1234",
      "manage": "Mark",
    }
  }
}

需要实现一个动态校验函数,接收三个入参:

  • 第一个参数为待校验的JS对象
  • 第二个参数为父节点名称(字符串格式)
  • 第三个参数为子节点名称(字符串格式)
    如果子节点存在于指定父节点下则返回true,否则返回false。
代码实现
const childNodeExist = (obj, parentKey, childKey) => {
  // 先校验父节点存在,且父节点的值为非空对象(可持有子属性)
  if (Object.prototype.hasOwnProperty.call(obj, parentKey) && typeof obj[parentKey] === 'object' && obj[parentKey] !== null) {
    return Object.prototype.hasOwnProperty.call(obj[parentKey], childKey)
  }
  return false
}

说明:这里用Object.prototype.hasOwnProperty.call是为了避免对象重写hasOwnProperty方法导致的判断异常,如果你可以确保操作的对象没有重写该方法,也可以直接简化为obj.hasOwnProperty(parentKey)的写法。如果需要包含对象继承的属性作为判定范围,也可以将判断逻辑替换为parentKey in obj和childKey in obj[parentKey]。

调用示例

注意调用时父节点、子节点名称需要传入字符串格式,否则会抛出变量未定义的错误:

// 返回true,firstName存在于personalDetails下
console.log(childNodeExist(obj, 'personalDetails', 'firstName'))
// 返回true,designation存在于employeeDetails下
console.log(childNodeExist(obj, 'employeeDetails', 'designation'))
// 返回false,salary不存在于employeeDetails下
console.log(childNodeExist(obj, 'employeeDetails', 'salary'))

内容的提问来源于stack exchange,提问作者user2281858

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:24:03