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

174
Vistas
Devuelve un objeto en lugar de una matriz de objetos usando la función de mapa [codesandbox]

Ejemplo de CodeSandbox https://codesandbox.io/s/throbbing-worker-8s68n?file=/src/index.js

Así que tengo un objeto y estoy actualizando el nombre de la clave eliminando el __número, quiero mover la primera clave [694 y 695] al interior del objeto como id = 694. No logré que eso sucediera porque Obtengo un nuevo objeto para cada valor clave (vea el código a continuación).

 var options = { "694": { "title_694": "Tiger", "category_694": "848", "description_694": "long description" }, "695": { "title_694": "Turtles", "category_694": "347", "description_694": "long description" } }

y aquí está mi código

 Object.keys(options).map( value => ( { [value] : Object.keys(options[value]).map((keyName) => ( {[keyName.replace(/_*\d+/g, '')] : options[value][keyName]} )) } ) )

sale como se muestra a continuación

 [ { "694": [ { "title": "Tiger" }, { "category": "848" }, { "description": "long description" } ] }, { "695": [ { "title": "Turtles" }, { "category": "347" }, { "description": "long description" } ] } ]

¿Cómo puede hacer que funcione como se muestra a continuación?

 [ { "id": 694, "title": "Tiger", "category": "848", "description": "long description" }, { "id":695, "title": "Turtles", "category": "347", "description": "long description" } ]
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Hay una manera de hacerlo sin mapa:

 var result = []; Object.keys(options).forEach((element) => { result.push({ id: element, ...options[element] }); });

Producción:

 [ { "id": "694", "title_694": "Tiger", "category_694": "848", "description_694": "long description" }, { "id": "695", "title_694": "Turtles", "category_694": "347", "description_694": "long description" } ]

Pregúntame si tienes más preguntas. Pero necesita más código para eliminar la identificación del nuevo objeto de claves

about 4 years ago · Juan Pablo Isaza Denunciar

0

Usar forEach sin cambiar los nombres de las claves en el objeto original

 var result = []; Object.keys(options).forEach((element) => { const item = Object.fromEntries( Object.entries(options[element]).map(([k, v]) => { k = k.replace(/_*\d+/g, ""); return [k, v] }) ) result = [...result,{ id: element, ...item }] // Or you could use push which is slightly faster // To see benchmarks Google Spread operator vs push site: measurethat.net // result.push({ id: element, ...options[element] }); }); document.getElementById("app").innerHTML = `<pre>${JSON.stringify( result, null, 4 )}</pre>`; console.log(result);

La salida

 [ { "id": "694", "title": "Tiger", "category": "848", "description": "long description" }, { "id": "695", "title": "Turtles", "category": "347", "description": "long description" } ]
about 4 years ago · Juan Pablo Isaza Denunciar

0

Personalmente, como usted, prefiero no construir manualmente una matriz completamente nueva.

 var options = { "694": { "title_694": "Tiger", "category_694": "848", "description_694": "long description" }, "695": { "title_694": "Turtles", "category_694": "347", "description_694": "long description" } } let mutated = Object.values(Object.entries(options).map(([id, option]) => { return Object.assign({ id: id, }, Object.fromEntries(Object.entries(option).map(([key, value]) => { return [key.replace(/_*\d+$/g, ''), value]; }))); }));

Esto permite que la primera función de map cree una nueva matriz en consecuencia, Object.assign garantiza que tenga un solo objeto de cada uno, y Object.entries y Object.fromEntries para convertir en una matriz de pares para luego convertir las claves y luego volver de la matriz de pares.

Lea la documentación de MDN relacionada con Object.entries : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries

Eso también enlaza con la documentación de Object.fromEntries .

Como nota al margen, modifiqué su expresión regular para incluir la coincidencia de fin de línea, de modo que modifique algo como w3tag_694 de la manera esperada. También sugeriría cambiar el * en la expresión regular a un + para ser un poco más estricto.

Hay una advertencia: fromEntries es una característica relativamente nueva, pero es compatible con todos los principales navegadores que aún son compatibles con sus creadores. Consulte el soporte: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries#browser_compatibility

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