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

187
Views
Cómo resumir objeto y matriz en JavaScript

Estoy tratando de armar un objeto donde se cubrió parte de esta información.

 const tests = [ { id: 1, name: 'taro', designId: 1, designName: 'design1' }, { id: 1, name: 'taro', designId: 2, designName: 'design2' }, { id: 2, name: 'Bob', designId: 3, designName: 'design3' }, { id: 2, name: 'Bob', designId: 4, designName: 'design4' }, ];

Quiero establecer las siguientes expectativas.

 result = [ { id: 1, name: 'taro', designs: [ { designId: 1, designName: 'design1' }, { designId: 2, designName: 'design2' } ] }, { id: 2, name: 'Bob', designs: [ { designId: 3, designName: 'design3' }, { designId: 4, designName: 'design4' } ] } ]

Intenté usar lodash groupby como algo que probé, pero tengo problemas porque no puedo deshacerme de las propiedades adicionales.

 const result = _.chain(tests) .groupBy('id') .map((value, key) => ({ id: key, designs: value })) .value();
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Puede usar Array.prototype.reduce() combinado con Object.values() :

 const tests = [{id: 1,name: 'taro',designId: 1,designName: 'design1',},{id: 1,name: 'taro',designId: 2,designName: 'design2',},{id: 2,name: 'Bob',designId: 3,designName: 'design3',},{id: 2,name: 'Bob',designId: 4,designName: 'design4'}] const result = Object.values(tests.reduce((a, { id, name, ...rest }) => { a[id] = a[id] || { id, name, designs: [] } a[id].designs.push({ ...rest }) return a }, {})) console.log(result)

about 4 years ago · Juan Pablo Isaza Report

0

Usando reduce y findIndex :

 const tests = [ { id: 1, name: 'taro', designId: 1, designName: 'design1' }, { id: 1, name: 'taro', designId: 2, designName: 'design2' }, { id: 2, name: 'Bob', designId: 3, designName: 'design3' }, { id: 2, name: 'Bob', designId: 4, designName: 'design4' } ] const arr = tests.reduce((acc, curr) => { const findIdx = acc.findIndex(x => x.name === curr.name) const design = { designId: curr.designId, designName: curr.designName } if (findIdx === -1) { acc.push({ id: curr.id, name: curr.name, designs: [design] }) } else { acc[findIdx].designs.push(design) } return acc }, []) console.log(arr)

about 4 years ago · Juan Pablo Isaza Report

0

Puede lograr fácilmente el resultado de manera eficiente usando Map

 const tests = [ { id: 1, name: "taro", designId: 1, designName: "design1", }, { id: 1, name: "taro", designId: 2, designName: "design2", }, { id: 2, name: "Bob", designId: 3, designName: "design3", }, { id: 2, name: "Bob", designId: 4, designName: "design4", }, ]; const map = new Map(); tests.forEach(({ id, name, ...rest }) => map.has(id) ? map.get(id).designs.push(rest) : map.set(id, { id, name, designs: [rest] }) ); const result = [...map.values()]; console.log(result);
 /* This is not a part of answer. It is just to give the output fill height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }

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!