Этот алгоритм действительно забавен, так как есть много способов сделать это. Мое решение на самом деле сильно отличается от других решений, поэтому я решил написать об этом. Мой очень «жестокий», но работает.
Направления:
Учитывая размер массива и фрагмента, разделите массив на множество подмассивов, где каждый подмассив имеет размер длины
Примеры:
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; }