11485 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
Je travaille actuellement sur un projet où je manipule, en JavaScript, une tableau contenant des objets. A un certain moment, je créé une "sauvegarde" de ce tableau en le copiant, pour pouvoir restaurer l'état initial de ce tableau plus tard. Or, je me suis rendu compte que toute modification effectuée sur le premier tableau est bizarrement automatiquement effectuée sur le deuxième Smiley eek .

Pour la copie j'ai essayé de boucler dans le premier tableau pour dupliquer un à un les éléments dans le deuxième tableau, mais aucun changement.

J'ai aussi essayé la méthode du
copie_tab = tab.slice(0)
sans résultats concluants non plus.

Je précise que ce code est exécuté dans une application JS Windows Store.
Modifié par Bguigui67 (03 Mar 2015 - 09:30)
Bon ben après plusieurs expérimentations, la seule solution qui a marché est un peu bidouillesque :
var copie_tab = JSON.stringify(tab);

//Restauration
tab = JSON.parse(copie_tab);

Modifié par Bguigui67 (03 Mar 2015 - 09:52)
Bguigui67 a écrit :
Bon ben après plusieurs expérimentations, la seule solution qui a marché est un peu bidouillesque :
var copie_tab = JSON.stringify(tab);

//Restauration
tab = JSON.parse(copie_tab);

Ce n'est pas le moins du monde bidouillesque.
Quand tu copies un objet, tu ne le "clones" pas, tu copies un pointeur sur cet objet.
Donc tes deux pointeurs pointent sur le même objet.
En mettant le tableau sous la forme d'une chaîne de caractères, c'est comme si tu faisais une photocopie à l'instant où la chaîne de caractères est fabriquée.

Personnellement j'ai l'habitude de considérer que ce qui s'affiche est la représentation d'un objet.
Je crée mes objets, je les affiche, et éventuellement je les remets à jour.
Ce qui est affiché sur l'écran, c'est la valeur de la propriété de l'objet à l'instant où j'ai appelé la fonction "affichage": si je le modifie, ça n'a pas d'impact sur la propriété effective de l'objet.
Modifié par PapyJP (03 Mar 2015 - 10:51)
Merci beaucoup de ta réponse. Smiley smile
Effectivement, en pensant à ces objets comme étant des pointeurs, on comprend tout de suite mieux le fonctionnement de tout ça et l'utilité de l'instanciation dans certains cas Smiley cligne