Estoy tratando de escribir un programa bastante simple que divide una matriz en otra matriz de matrices más pequeñas de tamaño definido, sin embargo, el método push() no funciona. ¿Podría alguien por favor ayudarme con eso?
function chunk(array, size) { var newArray = []; var tempArray = []; for (let i = 0; i < array.length / size; i++) { for (let j = size * i, k = 0; j < size * i + size; j++, k++) tempArray[k] = array[j]; newArray.push(tempArray); } return newArray; } var data = [1, 2, 3, 4, 5, 6, 7, 8]; console.log(chunk(data, 2)); La salida ideal debería ser [[1, 2],[3, 4], [5, 6], [7, 8]] . Sin embargo, obtengo [[7,8],[7,8],[7,8],[7,8]] .
Ya casi estás ahí. Simplemente mueva la definición de tempArray dentro de su primer for -loop. De lo contrario, estaría presionando la misma matriz cada vez.
Ejemplo de trabajo:
function chunk(array, size) { const newArray = []; for (let i = 0; i < array.length / size; i++) { const tempArray = []; for (let j = size * i, k = 0; j < size * i + size; j++, k++) tempArray[k] = array[j]; newArray.push(tempArray); } return newArray; }; const data = [1, 2, 3, 4, 5, 6, 7, 8]; console.log(chunk(data, 2)); // [[1, 2],[3, 4], [5, 6], [7, 8]]La respuesta de @ Behemoth es la correcta para la pregunta . Pero si lo desea, también puede adoptar un enfoque ligeramente diferente como este para llegar a la solución.
function chunk(array, size){ const newArray = []; let i,j; for (i = 0,j = array.length; i < j; i += size) { newArray.push(array.slice(i, i + size)); } return newArray; }; var data = [1, 2, 3, 4, 5, 6, 7 ,8]; console.log(chunk(data, 2));Solución ligeramente diferente a @Behemoth y @Rukshan
function chunk(array, size) { var newArray = []; var tempArray = []; for (let i = 0; i < array.length / size; i++) { for (let j = i; j < i + 1; j++) { for (let k = 0; k < size; k++) { if (array[size * j + k]) { tempArray.push(array[size * j + k]); } } newArray.push(tempArray); tempArray = []; } } return newArray; }; var data = [1, 2, 3, 4, 5, 6, 7, 8]; console.log(chunk(data, 2));La solución sería [ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ], [ 7, 8 ], [ 9 ] ] en lugar de [ [ 1, 2 ], [ 3, 4 ], [ 5 , 6 ], [ 7, 8 ]]