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

270
Views
¿Cómo agrupar objetos con el mismo valor en un objeto más grande?

Tengo datos en el siguiente formato:

 data = [ { group: G1, name: A}, { group: G1, name: B}, { group: G2, name: C}, { group: G2, name: D} ]

e intente convertirlo en datos en el formato de:

 transformedData = [ {group: G1, names: ['A','B']}, {group: G2, names: ['C','D']} ]

No tengo idea de cómo hacerlo en JavaScript. Cualquier ayuda apreciada.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

A continuación se presenta una posible forma de lograr el objetivo deseado.

Fragmento de código

 const myTransform = arr => ( Object.values( arr.reduce( (acc, { group, name }) => ( ( acc[group] ??= ({ group, names: [] }) ).names.push(name), acc ), {} ) ) ); /* explanation // method to transform array const myTransform = arr => ( Object.values( // extract values from the result of below operation arr.reduce( // iterate over "arr" using ".reduce()" (acc, { group, name }) => { // "acc" is accumulator, destructure group, name // set-up key-value pair in "acc" for group with "names" array as part of value (acc[group] ??= ({ group, names: []})); // push the "name" into the "names" array acc[group].names.push(name); return acc; // return "acc" }, {} ) ) ); */ const data = [ { group: 'G1', name: 'A'}, { group: 'G1', name: 'B'}, { group: 'G2', name: 'C'}, { group: 'G2', name: 'D'} ]; console.log( 'transformed array:\n', myTransform(data) );
 .as-console-wrapper { max-height: 100% !important; top: 0 }

Explicación

Comentarios agregados al fragmento anterior.

about 4 years ago · Juan Pablo Isaza Report

0

Tenga cuidado con la declaración de data , de lo contrario obtendrá el error G1 not defined .

Utilice los métodos Array#reduce y Object.values de la siguiente manera:

 const input = [{ group: "G1", name: "A"}, { group: "G1", name: "B"}, { group: "G2", name: "C"}, { group: "G2", name: "D"}], output = Object.values( input.reduce( (prev, {group,name}) => prev[group] ? ({...prev,[group]:{group,name:[...prev[group].name,name]}}) : ({...prev,[group]:{group,name:[name]}}), {} ) ); console.log( output );

Alternativamente...

 const input = [{ group: "G1", name: "A"}, { group: "G1", name: "B"}, { group: "G2", name: "C"}, { group: "G2", name: "D"}], output = input.reduce( (prev, {group,name}) => { const found = prev.find(item => item.group === group); if( found ) { found.name.push( name ); } else { prev = [...prev, {group,name:[name]}]; } return prev; }, [] ); 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!