Variable modifiée alors que non concernée ??

Résolu
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
-
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
-
Bonjour à tous,

encore un problème...

j'ai déclaré mon tableaux "artistes".
ensuite je veux en faire une copie :

var expand_artistes_tab = artistes;

ce nouveau tableau sera semblable par les clés et la structure, mais pas par les valeurs, que je vais modifier.
Le problème, c'est que quand je modifie une case du tableau "expand_artistes_tab", ça modifie aussi la même case du tableau "artistes" !

la ligne en question :
expand_artistes_tab[i] = LireCookie("artiste_"+i);
 implique
artistes[i] = LireCookie("artiste_"+i);

pourtant, la fonction en question LireCookie a été prise sur Internet, et je n'ai rien changé dedans pour qu'elle modifie le tableau "artistes" ! je la mets en-dessous au cas où, mais je ne vois pas pourquoi elle serait fautive. Surtout que attention:

si je définis moi-même le tableau expand_artistes_tab[i] valeur par valeur, sans faire var x = y, le problème ne se pose plus !!

quelle est l'erreur à votre avis ? merci !!

        function getCookieVal(offset){
            var endstr=document.cookie.indexOf (";", offset);
            if (endstr==-1) endstr=document.cookie.length;
            return unescape(document.cookie.substring(offset, endstr));
        }
        function LireCookie(nom){
            var arg=nom+"=";
            var alen=arg.length;
            var clen=document.cookie.length;
            var i=0;
            while (i<clen){
                var j=i+alen;
                if (document.cookie.substring(i, j)==arg) return getCookieVal(j);
                i=document.cookie.indexOf(" ",i)+1;
                if (i==0) break;
            }
            return null;
        }

5 réponses

Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
B
onjour à tous...






var a= new Array("a","b","c"); // Création d'un Tableau
var b=a;                                  // Création d'un POINTEUR sur le tableau déclaré car a est un tableau (1)
var c =a.slice(0);                      // Création d'un nouvel objet Array






(1) d'objet quelconque plus généralement cela peut être utile pour swaper des enregistrements par exemple, mais cela peut être dangereux aussi.





;0)
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Je n'ai peut-être pas été très clair quand j'ai dit :

si je définis moi-même le tableau expand_artistes_tab[i] valeur par valeur, sans faire var x = y, le problème ne se pose plus !!

c'est à dire que je déclare explicitement les deux tableaux exactement de la même façon :

artistes[1] = "Pierre";
expand_artistes_tab[1] = "Pierre";

etc.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
bonjour,

   j'ai lu ça, il n'y a pas très longtemps...
   je ne sais plus où ??? Alzenheimer ??? 
   désolé de ne pouvoir donner le lien et citer les "auteurs"



<Script type= "Text/JavaScript">

var a=new Array("a","b","c");
var b=a;
var c=a.slice(0);





b[1]="xxx";
c[2]="yyy";





for ( var i=0;imon Site
    
=Bul
M'écrire


<hr />
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Merci Bultez !
et d'où pense-tu que vienne ce pb, est-ce un bug de javascript à proprement, ou une propriété que je ne connaîtrai pas ?
à+
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Ah d'accord je vois ! Merci beaucoup à vous deux, vous m'avez bien aidé.
à bientôt