Es gab viele Antworten, aber das ist, was ich benutze:
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]]
Suchen Sie zunächst nach einem Rest, wenn Sie den Index durch die Blockgröße dividieren.
Wenn es einen Rest gibt, geben Sie einfach das Akkumulator-Array zurück.
Wenn es keinen Rest gibt, ist der Index durch die Blockgröße teilbar. Nehmen Sie also einen Slice aus dem ursprünglichen Array (beginnend mit dem aktuellen Index) und fügen Sie ihn dem Akkumulator-Array hinzu.
Das zurückgegebene Akkumulator-Array für jede Iteration von Reduce sieht also ungefähr 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]]