Push d'un array au sein d'un autre array [Résolu/Fermé]

Signaler
Messages postés
61
Date d'inscription
dimanche 3 novembre 2013
Statut
Membre
Dernière intervention
2 mars 2016
-
BlueGone
Messages postés
61
Date d'inscription
dimanche 3 novembre 2013
Statut
Membre
Dernière intervention
2 mars 2016
-
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

Messages postés
1158
Date d'inscription
samedi 17 mai 2008
Statut
Membre
Dernière intervention
6 mars 2016
187
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 );
BlueGone
Messages postés
61
Date d'inscription
dimanche 3 novembre 2013
Statut
Membre
Dernière intervention
2 mars 2016
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 ?
Mimiste
Messages postés
1158
Date d'inscription
samedi 17 mai 2008
Statut
Membre
Dernière intervention
6 mars 2016
187
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
BlueGone
Messages postés
61
Date d'inscription
dimanche 3 novembre 2013
Statut
Membre
Dernière intervention
2 mars 2016
6
Merci beaucoup, c'est très clair et compréhensible. Ça fonctionne à la perfection. Je passe le sujet en résolu.