javascript - 验证对象内的嵌套键[重复]

Posted

技术标签:

【中文标题】javascript - 验证对象内的嵌套键[重复]【英文标题】:javascript - validate nested key inside an object [duplicate] 【发布时间】:2021-10-23 12:50:48 【问题描述】:

我有以下 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

【问题讨论】:

【参考方案1】:

你可以试试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'));

【讨论】:

另一种方式是return Object.keys(obj[prop]).includes(childProp); @Mamun,可选链接? 可能不适用于所有浏览器,对吧?另一种方式? @user2281858,在不使用?.的情况下添加了第二个解决方案,请检查:)【参考方案2】:

这是您需要的吗?

const childNodeExist = (obj, parentNode, childNode) => 
    return (obj[parentNode][childNode] ? true : false);


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


console.log(childNodeExist(obj, "personalDetails", "firstName"));
console.log(childNodeExist(obj, "employeeDetails", "designation"));
console.log(childNodeExist(obj, "employeeDetails", "salary"));

【讨论】:

【参考方案3】:

这样就可以了:

  const childNodeExist = (obj, parentNode, childNode) => Boolean(obj[parentNode][childNode])

【讨论】:

以上是关于javascript - 验证对象内的嵌套键[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在javascript中过滤数组内的嵌套对象

测试嵌套 JavaScript 对象键是不是存在

测试嵌套 JavaScript 对象键是不是存在

JavaScript:推送嵌套对象键值对

javascript javascript测试是否存在嵌套对象键

javascript 检查嵌套对象键的存在