коренастая обезьяна
Напишите функцию, которая разбивает массив (первый аргумент) на группы длиной size
(второй аргумент) и возвращает их в виде двумерного массива.
unction chunkArrayInGroups(arr, size) { // Break it up. return arr; } chunkArrayInGroups(["a", "b", "c", "d"], 2); // testcases:chunkArrayInGroups(["a", "b", "c", "d"], 2)
should return[["a", "b"], ["c", "d"]]
.chunkArrayInGroups([0, 1, 2, 3, 4, 5], 3)
should return[[0, 1, 2], [3, 4, 5]]
.chunkArrayInGroups([0, 1, 2, 3, 4, 5], 2)
should return[[0, 1], [2, 3], [4, 5]]
.chunkArrayInGroups([0, 1, 2, 3, 4, 5], 4)
should return[[0, 1, 2, 3], [4, 5]]
.chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6], 3)
should return[[0, 1, 2], [3, 4, 5], [6]]
.chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 4)
should return[[0, 1, 2, 3], [4, 5, 6, 7], [8]]
.chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2)
should return[[0, 1], [2, 3], [4, 5], [6, 7], [8]]
.
Обзор) метод arr.splice() arr.splice(позиция для начала удаления, сколько элементов нужно удалить). Исходный массив мутировал.
var arr = ["a", "b", "c", "d"]; // arr.splice(start position, number of items to delete) arr.splice(0, 2); // output: ["a", "b"] what has been deleted arr; // output: ["c", "d"] original array has been mutated
var arr = ["a", "b", "c", "d"]; // try splice more than what is left in the array arr.splice(0, 5); // only 4 items currently in the array // output: ["a", "b", "c", "d"] whatever is available in arr
Наконец, важно, чтобы холдингPot находился вне цикла While. Если бы он был внутри, то holdPot сбрасывался бы каждый раз, и наш результат будет содержать только последний массив .splice внутри.
function chunkArr (arr, size) { var holdingPot = []; while (arr.length !== 0) { // since holdingPot is called outside of while stmt // it will accumulate information holdingPot.push(arr.splice(0, size)); } return holdingPot; } debugger; chunkArr(["a", "b", "c", "d"], 2);