Tener una respuesta de una base de datos con el siguiente formato
{ "data": [ { "id": 1, "attributes": { "active": true, "details": "TEST", "client": { "data": { "id": 1, "attributes": { "code": "20000", "technology": { "data": { "id": 2, "attributes": { "name": "TEST" } } } } } } } } ], "meta": { "pagination": { "page": 1, "pageSize": 25, "pageCount": 1, "total": 2 } } }Cada población de una relación tiene una propiedad de datos, dentro tiene una identificación y otras propiedades llamadas atributos donde se guardan los datos reales. La cuestión es que manejar esto desde la interfaz es un desastre porque tienes que acceder a dos claves adicionales por nivel de relación "datos" y "atributos", así que si quieres acceder al nombre de un barrio de una ciudad, la llamada es como
city.data.attributes.neighborhood.data.attributes.nameQuiero deshacerme de las claves de datos y atributos y simplificar el objeto de esta manera
{ "active": true, "details": "TEST", "client": { "id": 1, "code": "20000", "technology": { "id": 2, "name": "TEST" } } }que es lo mismo pero sin las claves de datos y atributos. Tengo que hacer esto de forma recursiva porque no puedo saber cuántos niveles necesitaré.
Tengo este código pero creo que estoy lejos de una respuesta correcta a este problema
function flatten (obj) { const flattened = {} Object.keys(obj).forEach((key) => { const value = obj[key] if (typeof value === 'object' && value !== null && !Array.isArray(value)) { if (key === 'attributes') { Object.assign(flattened, flatten(value)) } else { flattened[parent] = flatten(value, key) } } else if (Array.isArray(value) && key === 'data') { value.forEach((item) => { Object.assign(flattened, flatten(item)) }) } else { flattened[key] = value } }) return flattened }el código de respuesta es de Strapi headless CMS versión 4.0.6