Вот еще одно решение с методом lower () , хотя и немного отличающееся от других примеров.Надеюсь, мое объяснение немного яснее.
var arr = [0, 1, 2, 3, 4, 5, 6, 7];
var chunkSize = 3;
arr = arr.reduce((acc, item, idx) => {
let group = acc.pop();
if (group.length == chunkSize) {
acc.push(group);
group = [];
}
group.push(item);
acc.push(group);
return acc;
}, [[]]);
console.log(arr); //Prints [[0, 1, 2], [3, 4, 5], [6, 7]]
Объяснение
Мы называем редуктор, который для каждого элемента в массиве получает последний элемент аккумулятора с pop()
.Помните, что этот элемент является массивом, который группирует до chunkSize
количества элементов ( 3 в этом примере ).
Если и только если эта группа имеет длину массива, равнуюchunksize
нам нужно заново вставить группу обратно в аккумулятор и создать новую группу.
Затем мы помещаем ток item
в наш массив group
(, который может уже содержать 0, 1 или 2 пункта из предыдущих шагов ).С текущим item
, вставленным в group
, нам нужно повторно вставить group
обратно в большую коллекцию.
Процесс будет повторяться, пока мы не повторим все элементы в arr
.
Обратите внимание, что мы также предоставили редуктору начальное значение пустого массива внутри массива с [[]]
.