Этот алгоритм действительно забавен, так как есть много способов сделать это. Мое решение на самом деле сильно отличается от других решений, поэтому я решил написать об этом. Мой очень «жестокий», но работает.

Направления:

Учитывая размер массива и фрагмента, разделите массив на множество подмассивов, где каждый подмассив имеет размер длины

Примеры:

chunk([1, 2, 3, 4], 2) → [[ 1, 2], [3, 4]]

chunk([1, 2, 3, 4, 5], 2) → [[ 1, 2], [3, 4], [5]]

chunk([1, 2, 3, 4, 5, 6, 7, 8], 3) → [[ 1, 2, 3], [4, 5, 6], [7, 8]]

На мой взгляд, я думал об овоще (ввод массива), мандолине (операция сращивания), ширине ломтика (ввод размера) и конечной тарелке (переменная температуры).

function chunk(array, size) {
let temp = []; //final plate
let splice = []; //to hold the sliced veggies

}

Подобно тому, как работает мандолина, я представляю, как нарезаю массив до тех пор, пока он не станет слишком маленьким для нарезки. Цикл while должен быть лучшим циклом для этого, но я выбрал цикл for, так как предпочитаю циклы с определенным концом.

Конечная точка должна быть длиной массива, разделенной на размер. Нет необходимости округлять в меньшую сторону, поскольку цикл, естественно, игнорирует числа после десятичных чисел.

const div = array.length / size;

Затем я приступаю к сращиванию массива. Нет необходимости вычислять индекс, так как я соединяю массив и, следовательно, удаляю элементы из исходного массива, которые я поместил в свой новый массив. Для последнего фрагмента я определил длину, используя модульную операцию с длиной и размером массива, так как операция соединения имеет проблемы, когда размер превышает длину массива.

for (i = 0; i < div; i++) {
 if (array.length >= size) {
 splice = array.splice(0, size);
 temp.push(splice);
 } else {
 splice = array.splice(0, array.length % size);
 temp.push(splice);
}}

Это мое окончательное решение:

function chunk(array, size) {
let temp = [];
let splice = [];
const div = array.length / size;
for (i = 0; i < div; i++) {
 if (array.length >= size) {
 splice = array.splice(0, size);
 temp.push(splice);
 } else {
 splice = array.splice(0, array.length % size);
 temp.push(splice);
}}
return temp;
}