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

165
Visualizações
¿Cómo puedo agrupar una matriz de objetos por clave y crear otro objeto dentro?

¿Alguien sabe cómo agrupar una matriz de objetos por una clave de objeto y luego crear una nueva matriz de objetos basada en la agrupación? Por ejemplo, tengo una matriz de objetos Build como se muestra a continuación y quiero agruparlos por productos y crear otro objeto de colores y precio basado en eso.

 build = [ { 'Product': 'Cabinets', 'Color': 'Blue', }, { 'Product': 'CounterTop', 'Color': 'White', }, { 'Product': 'Cabinets', 'Color': 'Yellow', }, { 'Product': 'Cabinets', 'Color': 'Yellow', } ]

Y lo quiero así

 [ { 'Product':'Cabinet', 'color' : { 'Blue','Yellow' } }, { 'Product':'CounterTop', 'color' : { 'White' } } ]

Escribí un código para archivarlo, pero no obtengo el resultado esperado.

 build.forEach(pr => { if (pr.Product in result) { result[pr['Product']]['Color'] = pr['Color']; } else { result[pr['Product']] = { 'Product': pr['Product'], 'Color': pr['Color'] } } });

El código anterior devuelve

 [ { 'Product':'Cabinet', 'color' : 'Yellow' }, { 'Product':'CounterTop', 'color' : 'White' } ]
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Esperar 'color' : { 'Blue','Yellow' } en su salida es incorrecto. Los objetos son pares de datos clave-valor.

En cambio, desea que color sea una matriz. Ajusté tu código:

 build.forEach(pr => { if (pr.Product in result) { result[pr['Product']]['Color'].push(pr['Color']); } else { result[pr['Product']] = { 'Product': pr['Product'], 'Color': [pr['Color']] } } });

Ahora piense en cómo puede evitar valores duplicados en la matriz. La respuesta de @ Lissy93 ayuda con eso usando findIndex .

about 4 years ago · Juan Pablo Isaza Relatório

0

Aquí hay una versión de trabajo. Espero eso ayude :)

 const builds = [ { 'Product': 'Cabinets', 'Color': 'Blue' }, { 'Product': 'CounterTop', 'Color': 'White' }, { 'Product': 'Cabinets', 'Color': 'Yellow' }, { 'Product': 'Cabinets', 'Color': 'Yellow' } ]; const results = []; builds.forEach((build) => { const index = results.findIndex((b) => b.Product === build.Product); if (index === -1) { results.push({Product: build.Product, Color: [ build.Color ]}); } else { results[index] = {Product: build.Product, Color: [ ...results[index].Color, build.Color ]} } }); console.log(results);

El problema principal en su código fue que está mezclando matrices y pares clave-valor para color . Los KVP se ven como { color: 'red' } , mientras que las matrices serían: [ 'red', 'blue'] .

about 4 years ago · Juan Pablo Isaza Relatório

0

Usa esta estrategia:

  • Encuentra productos únicos
  • En función de los productos exclusivos, use Array#map y Array#filter para crear los datos deseados

Vea la demostración a continuación:

 const builds = [ { 'Product': 'Cabinets', 'Color': 'Blue' }, { 'Product': 'CounterTop', 'Color': 'White' }, { 'Product': 'Cabinets', 'Color': 'Yellow' }, { 'Product': 'Cabinets', 'Color': 'Yellow' } ], output = [...new Set(builds.map(({Product}) => Product))] .map(Product => ({ Product, Color:builds.filter(({Product:P}) => P === Product) .map(({Color}) => Color) }) ); console.log(output);

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