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

Résolu/Fermé
BlueGone Messages postés 61 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 2 mars 2016 - 1 mars 2016 à 18:03
BlueGone Messages postés 61 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 2 mars 2016 - 2 mars 2016 à 09:58
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 1149 Date d'inscription samedi 17 mai 2008 Statut Membre Dernière intervention 6 mars 2016 206
1 mars 2016 à 19:07
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 61 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 2 mars 2016 6
1 mars 2016 à 21:49
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 1149 Date d'inscription samedi 17 mai 2008 Statut Membre Dernière intervention 6 mars 2016 206
2 mars 2016 à 09:20
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 61 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 2 mars 2016 6
2 mars 2016 à 09:58
Merci beaucoup, c'est très clair et compréhensible. Ça fonctionne à la perfection. Je passe le sujet en résolu.
0