Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

163
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!