Tengo un objeto javascript con objetos anidados dentro:
{ "common": { "setting1": "Value 1", "setting2": 200, "setting3": true, "setting6": { "key": "value", "doge": { "wow": "" } } }, "group1": { "baz": "bas", "foo": "bar", "nest": { "key": "value" } }, "group2": { "abc": 12345, "deep": { "id": 45 } } }y tengo que obtener todas las claves como matriz anidada.
He probado esta función:
function getKeys(obj) { return Object.keys(obj).map((key, keys) => { if (typeof obj[key] !== 'object') return key; return [key, getKeys(obj[key])]; }); }Y obtuve esto: //
[ [ 'common', [ 'setting1', 'setting2', 'setting3', [Array] ] ], [ 'group1', [ 'baz', 'foo', [Array] ] ], [ 'group2', [ 'abc', [Array] ] ] ]En lugar del resultado esperado como este:
[ [ 'common', [ 'setting1', 'setting2', 'setting3','setting6', ['key','doge', ['wow']], [ 'group1', [ 'baz', 'foo', ['nest', ['key'] ], [ 'group2', [ 'abc', 'deep', ['id'] ] ] ]etc.
Ayudame por favor
Puede usar reduce en Object.entries y crear una función recursiva.
const data = {"common":{"setting1":"Value 1","setting2":200,"setting3":true,"setting6":{"key":"value","doge":{"wow":""}}},"group1":{"baz":"bas","foo":"bar","nest":{"key":"value"}},"group2":{"abc":12345,"deep":{"id":45}}} function getKeys(data) { return Object.entries(data).reduce((r, [key, value]) => { r.push(key) if (typeof value === 'object') r.push(getKeys(value)) return r }, []) } console.log(getKeys(data))Prueba esto
function getKeys (obj) { const keys = Object.keys(obj); for (let i = 0; i < keys.length; i++){ const key = keys[i]; if (typeof obj[key] === 'object') { keys.splice(i+1, 0, getKeys(obj[key])); i++; } } return keys }resultado:
'["common",["setting1","setting2","setting3","setting6",["key","doge",["wow"]]],"group1",["baz","foo","nest",["key"]],"group2",["abc","deep",["id"]]]'Probablemente no sea la solución más optimizada, pero debería funcionar.
Gracias, ambas opciones funcionaron! Solo tuve que agregar un registro nulo if (typeof obj[key] === 'object') debido a TypeError: no se puede convertir indefinido o nulo en claves de objeto const = Object.keys (obj); (uno de los valores era nulo y "El tipo de nulo devuelve 'objeto', que es un error histórico en JavaScript que quizás nunca se solucione").