Вот не мутирующее решение, использующее только рекурсию и срез ().
const splitToChunks = (arr, chunkSize, acc = []) => (
arr.length > chunkSize ?
splitToChunks(
arr.slice(chunkSize),
chunkSize,
[...acc, arr.slice(0, chunkSize)]
) :
[...acc, arr]
);
Тогда просто используйте его, как splitToChunks([1, 2, 3, 4, 5], 3)
, чтобы получить [[1, 2, 3], [4, 5]]
.
Здесь это скрипка для вас: https://jsfiddle.net/6wtrbx6k/2/