Entonces, dado que JavaScript no le permite copiar una matriz usando "=", tengo que escribir este código. pero no funciona
let arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; var arrclone = []; for (let x = 0; x < arr.length; x++) { for (let y = 0; y < arr[x].length; y++) { arrclone[x][y] = arr[x][y]; } } console.log(arrclone);Decía
arrclone[x][y] = arr[x][y]; ^ TypeError: Cannot set property '0' of undefined.¿Cómo es indefinido? Ambos ya han sido declarados. Lo siento, soy un principiante, lo siento si mi pregunta parece estúpida.
Cuando comienza, cada fila de la matriz está vacía. Así que inicialízalo en una fila vacía de la matriz:
for (let x = 0; x < arr.length; x++) { // Use this... arrclone[x] = []; // ========================> You missed this line. for (let y = 0; y < arr[x].length; y++) { arrclone[x][y] = arr[x][y]; } } FYI, para el enfoque correcto, use Array.slice() (pero solo para valores primitivos, vea el problema aquí ).
Idealmente, debería usar Array.slice() para copiar matrices:
let arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; var arrclone = arr.map(e => e.slice()); console.log(arrclone);Javascript no es un lenguaje que haga copias por encargo. Utiliza referencias y las almacena en su lugar. Aquí, literalmente, solo está copiando la referencia a los datos en lugar de los datos reales. Hay varias formas de ayudarte con esto.
La forma más sencilla es usar var arrclone = JSON.parse(JSON.stringify(arr))
También podemos usar la desestructuración de matrices y se verá así: var arrclone = [...arr]