Estoy tratando de poner cierto valor en cierta matriz bidimensional pero agrega diferente.
Aquí está mi código.
const arr = [] const tdArr = [] arr.length = 5 arr.fill('p', 0) for(let i = 0; i < arr.length; i++){ tdArr.push(arr) } const makeRnd = (min, max) => { min = Math.ceil(min) max = Math.floor(max) return Math.floor(Math.random() * (max - min)) + min } let firstRnd = makeRnd(0, 4) let secRnd = makeRnd(0, 4) let tdArr2 = [...tdArr] tdArr2[firstRnd][secRnd] = 'q' console.log(tdArr2) No sé por qué no (por ejemplo) tdArr2[0][1] no se cambia, pero también cambia todos los segundos valores de las matrices.
Parece fácil, pero no puedo buscarlo en Google :( ¡Gracias por la ayuda!
Use tdArr.push([...arr]) en el bucle for en lugar de tdArr.push(arr) .
const arr = [] const tdArr = [] arr.length = 5 arr.fill('p', 0) for(let i = 0; i < arr.length; i++){ tdArr.push([...arr]) } const makeRnd = (min, max) => { min = Math.ceil(min) max = Math.floor(max) return Math.floor(Math.random() * (max - min)) + min } let firstRnd = makeRnd(0, 4) let secRnd = makeRnd(0, 4) let tdArr2 = [...tdArr] tdArr2[firstRnd][secRnd] = 'q' console.log(tdArr2)Como mencionó @Dave Newton, cada elemento de la matriz tdArr es el mismo que es una referencia a arr , por lo que cuando cambia un valor de arr , todos los elementos de tdArr cambian, ya que todos hacen referencia a la misma matriz.
Presionaría una matriz literal en lugar de crear una matriz y luego la empujaría o crearía una copia como se menciona en la respuesta anterior y empujaría la copia en cada iteración.
tdArr.push(['p']);