Dado un objeto como este:
const spacing = { xxs: "0.25rem", xs: "0.5rem", sm: "0.75rem", md: "1rem", lg: "1.5rem", "2xl": "2rem", "3xl": "3rem", oggetto: { "1": 1, "2": 2, }, } Estoy tratando de escribir una función que recorra mi objeto y verifique si la propiedad de este objeto es otro objeto anidado, como oggetto . En ese caso, me gustaría llamar recursivamente a la función. Mi objetivo principal es recuperar todas las claves del objeto principal y cualquier objeto anidado. Compartiría algo de código, pero realmente no tengo idea de cómo abordar esto. ¡Gracias!
function getObjectKeys(o, keys = []) { Object.entries(o).forEach(([key, value]) => { if (typeof value === "object") { getObjectKeys(value, keys); } else { keys.push(key); } }); return keys; } getObjectKeys(spacing); // [ "xxs", "xs", "sm", "md", "lg", "2xl", "3xl", "1", "2" ]primero debe considerar las matrices cuando use typeof ya que typeof de una array y un object devuelven 'objeto'.
luego puede tener una función recursiva para recorrer las claves y devolverlas si contienen un objeto.
por ejemplo, algo como esto devolverá una matriz de matrices que contienen la clave del objeto en el primer índice y la ruta completa para acceder al objeto en el segundo índice:
const obj = { n: 1, s: 'test', b: false, a: [], obj1: { n: 2 }, obj2: { innerObj: { b: true, otherInnerObj: { s: 'hi' }, }, a: [] }, obj3: {} }; function findObjects(obj, parent, pathArr = []) { for (k in obj) { const v = obj[k]; if (typeof v === 'object' && !Array.isArray(v)) { const parentName = `${parent}/${k}`; pathArr.push([k, parentName]); findObjects(v, parentName, pathArr); } } return pathArr; } const result = findObjects(obj, 'obj'); const onlyKeys = result.map(x => x[0]); const onlyPaths = result.map(x => x[1]); console.log(onlyKeys); console.log(onlyPaths); console.log(result);