Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

158
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda