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日
这是您需要的吗?
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"));
你可以尝试使用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'));