Entonces, se supone que esta función divide la matriz en partes del tamaño del segundo argumento, por ejemplo, [1, 2, 3, 4] con el segundo argumento 2 devolvería [[1, 2], [3, 4]], si el número es 3 devolvería [[1, 2, 3], [4]] y así sucesivamente. Mi función parece comportarse de manera similar, pero solo devuelve el primer fragmento, y los fragmentos posteriores son solo matrices vacías. Aumento el índice por el segundo argumento después de cada iteración, por lo que no estoy seguro de por qué no funciona. ¿Alguien puede explicar qué está sucediendo exactamente aquí y dónde está el error en la lógica?
let arr = [1, 2, 3, 4, 5, 6] function test(arr, num) { let idx = 0; let newArr = [] while (idx < arr.length) { newArr.push(arr.slice(idx, num)) idx = idx + num } return newArr } console.log(test(arr, 2))Necesita un índice como segundo parámetro de Array#slice , en lugar de la longitud del segmento.
Por ejemplo, si toma la segunda matriz, index = 2 y el segundo parámetro tiene que ser 4 , el índice del final para el corte.
chunks values 1 2 3 4 5 6 indices 0 1 2 3 4 5 slice 0 2 1 2 2 4 3 4 4 6 5 6 function test(arr, num) { let idx = 0; let newArr = []; while (idx < arr.length) { newArr.push(arr.slice(idx, idx += num)); } return newArr; } let arr = [1, 2, 3, 4, 5, 6]; console.log(test(arr, 2));