Trouble with New tableau généré des tableaux de la matrice
let arr = [[1,2,3], [4,5,6], [7,8,9]]
arr[0][1] = 'X'
arr[1][1] = 'O'
console.log(arr);
Je suis en train de travailler sur un jeu tic-tac-toe préliminaire et cette méthode pour créer la table me sert bien.
À la lecture sur d'autres méthodes pour générer une table de réseau matriciel J'ai trouvé ce
let newArr = new Array(3).fill(new Array(3))
newArr[0][1] = 'X'
console.log(newArr)
Comme je tente de revenir newArr il remplace en fait la colonne entière avec « X ».
Pourquoi cela fait-il cela? Je pensais que peut-être, au cours de la pile, j'ai reconnu la valeur d'un index indéfini et que je préférais faire la même chose pour toute la colonne, mais je ne peux pas confirmer.
Et d'expliquer pourquoi, 'array.fill' attend 1 argument et il va remplir le tableau avec cet élément. Maintenant, les objets sont copiés par référence, donc quand vous lui passez un objet/tableau, vous remplissez toutes les valeurs dans un tableau avec la même référence. Par conséquent, la mise à jour de la valeur 1 met à jour toutes les valeurs. – Rajesh
Merci beaucoup, c'est tout à fait logique. Certainement pas pratique d'appliquer Array.fill avec le même objet de référence. – jondub
Une alternative peut être 'Array.from ({longueur: 3}, (x) => new Array (3))', mais il s'agit d'une fonctionnalité ES6. Travaillerait pour vous mais l'utiliserait à vos risques et périls – Rajesh