Tengo un objeto con objetos anidados. En este objeto, cada objeto tiene dos o más subobjetos. Quiero reunir todos los subobjetos en una matriz de datos. ¿Cómo hacerlo con JavaScript?
const category = { id: 1, title: "a", level: 2, __parent: { id: 2, title: "b", level: 1, __parent: { id: 3, title: "c", level: 0, } } };La salida que quiero es esta :
[{ id: 1, title: "a", level: 2, __parent: null }, { id: 2, title: "b", level: 1, __parent: null }, { id: 3, title: "c", level: 0, __parent:null }]Sería algo así:
const myArray = [] const category = ...; function foo(obj){ myArray.push({ title:obj.title, .... }) if (obj._parent) foo(obj._parent) } foo(category)Básicamente, desea obtener la lista de antepasados.
const ancestors = [] var parent = category while (parent) { ancestors.push({ id: parent.id, level: parent.level, __parent: null }) parent = parent.__parent }use la recursividad para extraer objetos:
const category = { id: 1, title: "a", level: 2, __parent: { id: 2, title: "b", level: 1, __parent: { id: 3, title: "c", level: 0, } } }; function extract(obj,arr=[]){ arr.push({...obj,__parent:null}) if(!obj.__parent){ return arr } return extract(obj.__parent,arr) } let result = extract(category) console.log(result)