Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

113
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda