首页 > 解决方案 > javascript - 验证对象内的嵌套键

问题描述

我有以下 JavaScript 对象。

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

如何创建一个动态函数,将其JS object obj作为第一个参数,一个父节点作为第二个参数,一个子节点作为第三个参数。

如果第三个参数作为第二个参数中的子节点存在,则该函数应返回 true。例如。

const childNodeExist = (obj, personalDetails, firstName) => {
    //.. since firstName exists in personalDetails should return true
}

const childNodeExist = (obj, employeeDetails, designation) => {
    //.. since designation exists in employeeDetails should return true
}
const childNodeExist = (obj, employeeDetails, salary) => {
    //.. since salary exists in employeeDetails should return false
}

标签: javascriptecmascript-6

解决方案


您可以尝试使用Object.prototype.hasOwnProperty()

hasOwnProperty()方法返回一个布尔值,指示对象是否具有指定的属性作为它自己的属性(而不是继承它)。

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

const childNodeExist = (obj, prop, childProp) => {
    return obj[prop]?.hasOwnProperty(childProp) ?? false; 
}
console.log(childNodeExist(obj, 'personalDetails', 'firstName'));

console.log(childNodeExist(obj, 'employeeDetails', 'designation'));

console.log(childNodeExist(obj, 'employeeDetails', 'salary'));

更新:在所有浏览器中支持的替代方式:

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

const childNodeExist = (obj, prop, childProp) => {
    return obj.hasOwnProperty(prop)? obj[prop].hasOwnProperty(childProp) : false; 
}
console.log(childNodeExist(obj, 'personalDetails', 'firstName'));

console.log(childNodeExist(obj, 'employeeDetails', 'designation'));

console.log(childNodeExist(obj, 'employeeDetails', 'salary'));


推荐阅读