Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

148
Vistas
Dar formato al objeto con algunas claves para la matriz

Obtiene un resultado específico de mi base de datos que he mostrado a continuación:

 const data = { short: 'en', element: { 'dsdsea-22dada-2ffgd-xxada-eeee': { name: 'test name', comment: 'test comment' }, 'adad2a-dda13-dsdad-wwwwd-adaxx': { name: 'name 2' }, }

Y me gustaría aplicar una operación de JavaScript para poder obtener este resultado:

 [ { short: 'en', key: "dsdsea-22dada-2ffgd-xxada-eeee.name" value: "test name" }, { short: 'en', key: "dsdsea-22dada-2ffgd-xxada-eeee.comment" value: "test comment" }, { short: 'en', key: "adad2a-dda13-dsdad-wwwwd-adaxx.name" value: "name 2" } ]

He intentado usar una combinación de Object.entries y la función de mapa, pero no sé cómo manejar las teclas dobles en un objeto de un solo elemento.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Esta puede ser una posible solución para lograr el objetivo deseado.

Utiliza Object.entries() , .map() , .flatMap() y plantilla literal usando caracteres de acento grave `` .

Fragmento de código

 const getTransformedArray = obj => ( Object.entries(obj.element) // iterate over 'element' key-value pairs .flatMap(([k1, v1]) => ( // k1-v1 where v1 is object (with name, comment props) Object.entries(v1) // iterate over v1's key-value pairs .map(([k2, v2]) => ({ // map each iteration short: obj.short, // create the resulting object key: `${k1}.${k2}`, // 'key' is created using k1, k2 value: v2 // 'value' is v2 as-is })) )) // '.flatMap' used above avoids nesting of arrays ); const data = { short: 'en', element: { 'dsdsea-22dada-2ffgd-xxada-eeee': { name: 'test name', comment: 'test comment' }, 'adad2a-dda13-dsdad-wwwwd-adaxx': { name: 'name 2' } } }; console.log(getTransformedArray(data));

Explicación

Los comentarios en línea en el fragmento de código anterior explican cómo funciona el código.

EDITAR

Respuesta actualizada para usar .flatMap() como lo ha resaltado @pilchard .

about 4 years ago · Juan Pablo Isaza Denunciar

0

Necesitará dos bucles para iterar sobre cada element y luego cada valor de esos elementos.

Aquí usando bucles for...of en Object.entries() de cada uno, desestructurando en cada nivel para aplicar nombres relevantes a cada propiedad, y luego creando un valor de key compuesto usando un literal de plantilla

 const data = { short: 'en', element: { 'dsdsea-22dada-2ffgd-xxada-eeee': { name: 'test name', comment: 'test comment' }, 'adad2a-dda13-dsdad-wwwwd-adaxx': { name: 'name 2' }, } } const result = []; for (const [key, element] of Object.entries(data.element)) { for (const [prop, value] of Object.entries(element)) { result.push({ short: data.short, key: `${key}.${prop}`, value }) } } console.log(result)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Use Object.keys() para obtener las claves en el element , luego asigne la matriz devuelta usando la clave para acceder a cada objeto del elemento y así obtener el nombre. Aquí está el fragmento de código completo:

 const input = { short: 'en', element: { 'dsdsea-22dada-2ffgd-xxada-eeee': { name: 'test name', comment: 'test comment' }, 'adad2a-dda13-dsdad-wwwwd-adaxx': { name: 'name 2' }, }, }; function format(data = {}) { const { short = '', element = {} } = data; let result = Object.keys(element).map((key) => { return Object.values(element[key]).map((value) => ({ short, key, value })); }); result = result.flat(); return result; } const result = format(input); console.log(result)

esto imprime:

 [ { "short": "en", "key": "dsdsea-22dada-2ffgd-xxada-eeee", "value": "test name" }, { "short": "en", "key": "dsdsea-22dada-2ffgd-xxada-eeee", "value": "test comment" }, { "short": "en", "key": "adad2a-dda13-dsdad-wwwwd-adaxx", "value": "name 2" } ]
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda