Не хватает длины массива в цикле

94
01 марта 2021, 16:40
function chunkArrayInGroups(arr, size) {
    let newArray = [];
    newArray.push(arr.slice(0, size));
    let pre = [];
    for (let i = 0; i < arr.length ; i+=size) {
        pre.push(arr.splice(size, size));
    }
    console.log( arr.length )
    return newArray.concat(pre)
}
console.log(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2)); 

Функция должна вернуть -

[[0, 1], [2, 3], [4, 5], [6, 7], [8]]

А возвращает -

[[0, 1], [2, 3], [4, 5], [6, 7]]

То-есть, функция должна разбивать массив(первый аргумент) на группы по длине(второй аргумент) и вернуть их в виде двухмерного массива

В итоге я поковырялся и добавил к arr.length + 4 , и все вернуло как надо,но тогда возникает проблема с другими примерами массивов в функции(например этой chunkArrayInGroups(["a", "b", "c", "d"], 2) ) .

Answer 1
function chunkArrayInGroups(arr, size) {
    let pre = [];
    while(arr.length > 0) {
        pre.push(arr.splice(0, size));
    }
    console.log( arr.length )
    return pre;
}
Answer 2

Не стоит использовать splice. Массивы в js передаются по ссылке, таким образом вы разрушаете исходный массив.

function chunkArrayInGroups(arr, size) { 
  let chunks = []; 
  for (let i=0, n=arr.length; i<n; i+=size) { 
      let chunk = arr.slice(i,i+size); 
      chunks.push(chunk); 
  } 
  return chunks; 
} 
 
let res = chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2); 
console.log(JSON.stringify(res));

READ ALSO
Почему jquery не видит изменения в разметке?

Почему jquery не видит изменения в разметке?

Делаю аякс запрос, после которого меня значение атрибутаВ DOM всё меняется, как положено

89
VueJS не обновляет стили элемента

VueJS не обновляет стили элемента

Пишу drag-and-drop с возможностью поворота и ресайза на VueJsСуть работы простая: отслеживаю перемещения мышкой, в соответствии с ними обновляю модель,...

100
Как имитировать ввод текста в input password

Как имитировать ввод текста в input password

Есть сайт на angular, сайт не мойХочу немного оптимизировать работу с ним для себя

106