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 - 验证对象内的嵌套键[重复]的主要内容,如果未能解决你的问题,请参考以下文章