14 KiB
title | localeTitle |
---|---|
Chunky Monkey | Короткая обезьяна |
Не забудьте использовать Read-Search-Ask
если вы застряли. Попробуйте подключить программу и напишите свой собственный код
Проблема Объяснение:
Наша цель для этого алгоритма состоит в том, чтобы разделить arr
(первый аргумент) на более мелкие куски массивов с длиной, предоставленной size
(второй аргумент). Для завершения этого алгоритма необходимо выполнить 4 зеленых проверки (цели), которые необходимо выполнить нашему коду:
(['a', 'b', 'c', 'd'], 2)
ожидается[['a', 'b'], ['c', 'd']]
([0, 1, 2, 3, 4, 5], 3)
ожидается[[0, 1, 2], [3, 4, 5]]
([0, 1, 2, 3, 4, 5], 2)
ожидается[[0, 1], [2, 3], [4, 5]]
([0, 1, 2, 3, 4, 5], 4)
ожидается[[0, 1, 2, 3], [4, 5]]
Связанные ссылки
Подсказка: 1
В приведенных выше ссылках предлагается использовать Array.push()
, поэтому давайте начнем с создания первого массива для хранения меньших массивов, которые мы скоро получим так:
var newArray = [];
попытаться решить проблему сейчас
Подсказка: 2
Далее нам понадобится for loop
для циклического прохождения через arr
.
попытаться решить проблему сейчас
Подсказка: 3
Наконец, нам нужен метод для фактического разделения, и мы можем использовать Array.slice()
для этого. Ключом к этому алгоритму является понимание того, как все for loop
, size
, Array.slice()
и Array.push()
работают вместе.
попытаться решить проблему сейчас
Осторожно, спойлеры!
Решение впереди!
Решение базового кода:
function chunkArrayInGroups(arr, size) {
var temp = [];
var result = [];
for (var a = 0; a < arr.length; a++) {
if (a % size !== size - 1)
temp.push(arr[a]);
else {
temp.push(arr[a]);
result.push(temp);
temp = [];
}
}
if (temp.length !== 0)
result.push(temp);
return result;
}
Код Объяснение:
- Во-первых, мы создаем две пустые массивы, называемые
temp
иresult
, которые мы в конечном итоге вернем. - Наша для петли петли , пока не равно или больше , чем длина массива в нашем тесте.
a
- Внутри нашего цикла мы нажимаем
temp
используяtemp.push(arr[a]);
если остальная частьa / size
не равнаsize - 1
. - В противном случае мы нажимаем на
temp
, нажимаемtemp
на переменнуюresult
и сбрасываемtemp
в пустой массив. - Затем, если
temp
не пустой массив, мы подталкиваем его кresult
. - Наконец, мы возвращаем значение
result
.
Связанные ссылки
Решение промежуточного кода:
function chunkArrayInGroups(arr, size) {
// Break it up.
var arr2 = [];
for (var i = 0; i < arr.length; i+=size) {
arr2.push(arr.slice(i , i+size));
}
return arr2;
}
Код Объяснение:
- Сначала мы создаем пустой массив
arr2
где мы будем хранить наши «куски». - Цикл for начинается с нуля, каждый раз увеличивается по
size
через цикл и останавливается, когда он достигаетarr.length
. - Обратите внимание, что это для цикла не проходит через
arr
. Вместо этого мы используем цикл для генерации чисел, которые мы можем использовать в качестве индексов для срезания массива в правильных местоположениях. - Внутри нашего цикла мы создаем каждый фрагмент с помощью
arr.slice(i, i+size)
и добавляем это значение кarr2
сarr2.push()
. - Наконец, мы возвращаем значение
arr2
.
Связанные ссылки
Расширенное решение для кода:
function chunkArrayInGroups(arr, size) {
// Break it up.
var newArr = [];
var i = 0;
while (i < arr.length) {
newArr.push(arr.slice(i, i+size));
i += size;
}
return newArr;
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);
Код Объяснение:
-
Во-первых, мы создаем две переменные.
newArr
- пустой массив, на который мы будем нажимать. Мы также имеем переменнуюi
равную нулю, для использования в нашем цикле while. -
Наш цикл while цикл до тех пор, пока
i
будет равен или больше длины массива в нашем тесте. -
Внутри нашего цикла, мы выдвигаем к
newArr
массив с помощьюarr.slice(i, i+size)
. Впервые это петли, это будет выглядеть примерно так:newArr.push (arr.slice (1, 1 + 2))
-
После нажатия на
newArr
мы добавляем переменнуюsize
вi
. -
Наконец, мы возвращаем значение
newArr
.
Связанные ссылки
Расширенное решение кода 2:
function chunkArrayInGroups(arr, size) {
var newArr = [];
while (arr.length) {
newArr.push(arr.splice(0,size));
}
return newArr;
}
Код Объяснение:
- Во-первых, мы создаем переменную.
newArr
- пустой массив, на который мы будем нажимать. - Наше
while
петли петли , пока длина массива в нашем тесте не является 0. - Внутри нашего цикла, мы выдвигаем к
newArr
массива с помощьюarr.splice(0, size)
. - Для каждой итерации в
while
цикла, он удаляетsize
количество элементов из передней частиarr
и толкать их в виде массиваnewArr
. - Наконец, мы возвращаем значение
newArr
.
Связанные ссылки
Расширенное решение для кода 3:
function chunkArrayInGroups(arr, size) {
if (arr.length <= size){
return [arr];
}
else {
return [arr.slice(0,size)].concat(chunkArrayInGroups(arr.slice(size),size));
}
}
Код Объяснение:
- Массив меньше размера возвращается вложенным.
- Для любого массива, большего, чем размер, он разбивается на две части. Первый сегмент вложен и согласован со вторым вторым сегментом, который делает рекурсивный вызов.
Связанные ссылки
ПРИМЕЧАНИЯ ДЛЯ ВЗНОСОВ:
- НЕ добавляйте решения, похожие на любые существующие решения. Если вы считаете, что это похоже, но лучше , попробуйте объединить (или заменить) существующее подобное решение.
- Добавьте объяснение своего решения.
- Классифицируйте решение в одной из следующих категорий - Basic , Intermediate и Advanced .
- Пожалуйста, добавьте свое имя пользователя, только если вы добавили соответствующее основное содержимое . ( НЕ удаляйте существующие имена пользователей )
Увидеть
Wiki Challenge Solution Template
дляWiki Challenge Solution Template
для справки.