Cómo dividir una matriz en varias partes iguales en JS

Tuve un problema.

Una matriz contenía muchos elementos y quería dividirla en varios fragmentos.

Se me ocurrieron 2 soluciones completamente diferentes.

A) La primera fue dividir la matriz en partes iguales, por ejemplo, partes de 2 o 3 elementos B) La segunda fue crear n partes y agregarle un conjunto de elementos variables iguales

Es diferente cómo y por qué nos dividimos. La solución (A) es excelente cuando no sabe con cuántos grupos va a terminar y no le importa, pero sabe que quiere X elementos en cada nueva matriz que cree.

La solución (B) es excelente cuando sabe cuántos grupos desea crear y es estricto al respecto, pero no le importa cuántos elementos contendrá cada nueva matriz.

En otras palabras, con una matriz como

[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Con la solución (A) podemos crear fragmentos de 2 elementos y obtener

[ 1, 2 ]
[ 3, 4 ]
[ 5, 6 ]
[ 7, 8 ]
[ 9, 10 ]

or chunks of 3 items:

[ 1, 2, 3 ]
[ 4, 5, 6 ]
[ 7, 8, 9 ]
[ 10 ]

With solution (B) we can divide the array in 2 arrays, and get:

[ 1, 2, 3, 4, 5 ]
[ 6, 7, 8, 9, 10 ]

Or we can divide the array in 3 arrays, and get:

[ 1, 2, 3, 4 ]
[ 4, 5, 6, 7]
[ 8, 9, 10 ]

Here is the implementation of (A):

const items = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] //… your array, filled with values
const n = 3 //tweak this to add more items per line

const result = new Array(Math.ceil(items.length / n))
  .fill()
  .map(_ => items.splice(0, n))

In this example result is a new array of arrays:

[ 
  [ 1, 2, 3 ], 
  [ 4, 5, 6 ], 
  [ 7, 8, 9 ], 
  [ 10 ] 
]

Here is the implementation of (B), assuming you want an array of 3 arrays as a result:

const items = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] //… your array, filled with values

const n = 3
const result = [[], [], []] //we create it, then we'll fill it

const wordsPerLine = Math.ceil(items.length / 3)

for (let line = 0; line < n; line++) { for (let i = 0; i < wordsPerLine; i++) { const value = items[i + line * wordsPerLine] if (!value) continue //avoid adding “undefined” values result[line].push(value) } }

In this example result is

[ 
  [ 1, 2, 3, 4 ], 
  [ 5, 6, 7, 8 ], 
  [ 9, 10 ] 
]  

More js tutorials: