Es gibt viele Antworten, aber ich verwende diese:
const chunk = (arr, size) =>
arr
.reduce((acc, _, i) =>
(i % size)
? acc
: [...acc, arr.slice(i, i + size)]
, [])
// USAGE
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
chunk(numbers, 3)
// [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
Prüfen Sie zunächst, ob bei der Division des Index durch die Chunk-Größe ein Rest übrig bleibt.
Wenn es einen Rest gibt, wird einfach das Akkumulator-Array zurückgegeben.
Wenn es keinen Rest gibt, dann ist der Index durch die Stückgröße teilbar, also nehmen Sie ein Stück aus dem ursprünglichen Array (beginnend mit dem aktuellen Index) und fügen Sie es dem Akkumulator-Array hinzu.
Das zurückgegebene Akkumulator-Array für jede Iteration von reduce sieht also etwa so aus:
// 0: [[1, 2, 3]]
// 1: [[1, 2, 3]]
// 2: [[1, 2, 3]]
// 3: [[1, 2, 3], [4, 5, 6]]
// 4: [[1, 2, 3], [4, 5, 6]]
// 5: [[1, 2, 3], [4, 5, 6]]
// 6: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
// 7: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
// 8: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
// 9: [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]