Tengo el siguiente objeto JavaScript.
let obj = { "type": "user", "personalDetails": { "firstName": "Steven", "address": { "streetName": "abcd", "zipCode": "012345" } }, "employeeDetails": { "designation": { "id": "1234", "manage": "Mark", } } }¿Cómo puedo crear una función dinámica que tome este
JS object objcomo primer argumento, un nodo principal como segundo argumento y un nodo secundario como tercer argumento?si el tercer argumento está presente como un nodo secundario dentro del segundo argumento, la función debería devolver verdadero. Por ejemplo.
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 }Puedes intentar usar Object.prototype.hasOwnProperty() :
El método
hasOwnProperty()devuelve un valor booleano que indica si el objeto tiene la propiedad especificada como propiedad propia (en lugar de heredarla).
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'));Actualización: forma alternativa de soporte en todos los navegadores:
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'));¿Es esto lo que requieres?
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"));Esto haría el truco:
const childNodeExist = (obj, parentNode, childNode) => Boolean(obj[parentNode][childNode])