Push d'un array au sein d'un autre array

Résolu
BlueGone Messages postés 65 Statut Membre -  
BlueGone Messages postés 65 Statut Membre -
Bonjour,

Dans mon code, j'ai un array grille de taille 320*320 rempli aléatoirement de 0 et de 1. J'essaye de push grille au sein d'un autre array vide déclaré par
var game = []
Cependant, il semblerait qu'il y aille comme un lien symbolique entre grille et game, car lorsque je modifie game par la suite, grille l'est aussi.

function animate()
{
game.push(grille);
console.log(grille);
console.log(game[0]); // Affiche grille, contenu dans un autre array
// Reset de la grille //////////////////////////////////////////////////////
for(var i = 0; i < 320; i++)
{
for(var j = 0; j < 320; j++)
{
grille[i][j]=0;
}
}
console.log(game[0]); // Affiche la grille vide, dans un autre array
}


Savez vous à quoi est dû ce lien symbolique ? Existe-t-il un moyen de push uniquement les valeurs de grille et non pas son adresse ?

1 réponse

Mimiste Messages postés 1159 Statut Membre 206
 
Bonsoir

Oui c'est normal, le tableau est ajouté "par référence".

Il faut d'abord le dupliquer.
Soit tu le fait à la main, en créant un tableau temporaire, une boucle for pour remplir ce tableau temporaire avec les valeurs que tu veux dupliquer.

Soit tu utilise plus rapidement :

var tableauDuplique = grille.slice();
game.push(tableauDuplique );
0
BlueGone Messages postés 65 Statut Membre 6
 
D'accord, je pense saisir. Mais du coup, le tableauDuplique n'est t-il pas ajouté lui aussi par référence ? Si on modifie ultérieurement tableauDuplique (pour refaire la même opération avec une grille qui aura changé), cela n'aura t-il pas une influence sur game ?
0
Mimiste Messages postés 1159 Statut Membre 206
 
Non car "tableauDuplique" est déclarée dans le contexte de la fonction "animate".
Si tu ré exécute une seconde fois la fonction "animate", le tableau sera de nouveau initialisé à une nouvelle adresse mémoire et non pas par dessus la précédente.

Ce serait effectivement le cas si tu avait fait le "var tableauDuplique" en dehors de la fonction "animate", de manière globale quoi
0
BlueGone Messages postés 65 Statut Membre 6
 
Merci beaucoup, c'est très clair et compréhensible. Ça fonctionne à la perfection. Je passe le sujet en résolu.
0