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

114
Views
Convierta una matriz de objetos en una matriz de matrices agrupadas conservando el orden - Javascript

Tengo una matriz de objetos y necesito convertirla en una matriz de matrices agrupadas según la posición, pero manteniendo el orden de los elementos.

Esto es lo que hice:

 const data = [{ position: 'left', message: 'a' }, { position: 'left', message: 'b' }, { position: 'left', message: 'c' }, { position: 'right', message: 'd' }, { position: 'right', message: 'e' }, { position: 'left', message: 'f' }, { position: 'left', message: 'g' }] console.log(data.reduce((a, c) => { let b = []; let d = []; if (c.position === 'left') { b.push(c.message) } if (c.position === 'right') { d.push(c.message) } a.push(b) return a }, []))

Rendimiento esperado:

 [['a', 'b', 'c'], ['d', 'e'], ['f', 'g']]

Los mismos elementos de posición se agrupan en una matriz y si la siguiente posición es diferente, se agrupa en una matriz diferente y continúa. Por ejemplo, 'a' 'b' 'c' se colocan a la izquierda y se agrupan dentro de una matriz, 'd' 'e' se colocan a la derecha, se agrupan como la segunda matriz y 'f' 'g' se dejan posicionados, se agrupan como una tercera matriz.

Gracias.

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

0

Codificar la creación de dos matrices no será suficiente, especialmente dentro de la devolución de llamada .reduce . Si necesita usar .reduce aquí (que no recomendaría porque parece un poco complicado), use el índice de iteración para verificar el último índice y ver qué position se usó allí. Si es diferente de la posición del índice actual, inserte una nueva matriz en el acumulador. Finalmente, empuje incondicionalmente el mensaje actual a la última matriz en el acumulador.

 const data = [{ position: 'left', message: 'a' }, { position: 'left', message: 'b' }, { position: 'left', message: 'c' }, { position: 'right', message: 'd' }, { position: 'right', message: 'e' }, { position: 'left', message: 'f' }, { position: 'left', message: 'g' }] console.log(data.reduce((a, { position, message }, i, arr) => { const lastPosition = arr[i - 1]?.position; if (lastPosition !== position) a.push([]); a[a.length - 1].push(message); return a }, []))

Sin .reduce , y probablemente más legible:

 const data = [{ position: 'left', message: 'a' }, { position: 'left', message: 'b' }, { position: 'left', message: 'c' }, { position: 'right', message: 'd' }, { position: 'right', message: 'e' }, { position: 'left', message: 'f' }, { position: 'left', message: 'g' }]; let lastPosition; const result = []; for (const { position, message } of data) { if (position !== lastPosition) result.push([]); result[result.length - 1].push(message); lastPosition = position; } console.log(result);

about 4 years ago · Juan Pablo Isaza Report

0

Puede agrupar mirando el objeto anterior.

 const data = [{ position: 'left', message: 'a' }, { position: 'left', message: 'b' }, { position: 'left', message: 'c' }, { position: 'right', message: 'd' }, { position: 'right', message: 'e' }, { position: 'left', message: 'f' }, { position: 'left', message: 'g' }], result = data.reduce((r, o, i, a) => { if (o.position !== a[i - 1]?.position) r.push([]); r[r.length - 1].push(o); return r; }, []); console.log(result);
 .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!