let day = []; let hours = []; for (let j = 0; j < 3; j++) { for (let k = 0; k < 3; k++) { hours[k] = Math.floor(Math.random() * 25 + 20); } day[j] = hours; console.log(`day[${j}] ${day[j]}`); } console.log(`${day[0]}`) console.log(`${day[1]}`) console.log(`${day[2]}`)Cuando declara let hours = []; globalmente, además de decirle a JavaScript que day[j] = hours; , day[j] se asignará con la ubicación de memoria de las hours globales. Para evitar eso, puede asignar una nueva ubicación de memoria para cada hours generada declarándola en el alcance del bloque.
let day = []; for (let j = 0; j < 3; j++) { let hours = []; for (let k = 0; k < 3; k++) { hours[k] = Math.floor(Math.random() * 25 + 20); } day[j] = hours; console.log(`day[${j}] ${day[j]}`); } console.log(`${day[0]}`) console.log(`${day[1]}`) console.log(`${day[2]}`)Según la línea day[j] = hours , todos los valores de day es decir day[0] , day[1] y day[2] se refieren a la matriz hours . En el último ciclo de ejecución del bucle for interno, el valor de hours se establece en [29,27,42]. Por lo tanto, la salida es la misma para todos los valores del day .
Para tener valores adecuados para los elementos de cada day , modifique el código de la siguiente manera:
day[j] = [...hours]