javascript - 验证对象中的嵌套键

48 浏览
0 Comments

javascript - 验证对象中的嵌套键

这个问题已经有了答案

如何检查JavaScript对象中是否存在一个键?

我有以下JavaScript对象。

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

我该如何创建一个动态函数,它将这个JS对象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
}

admin 更改状态以发布 2023年5月23日
0
0 Comments

这是您需要的吗?

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"));

0
0 Comments

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

0