Avatar billede flashdevil Nybegynder
28. august 2002 - 12:31 Der er 8 kommentarer og
1 løsning

array problemer

jeg fatter simpelthen ikke det her:


Jeg definere 2 arrays:
myMap = [];

myMap1 = [ [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
        [1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1],
        [1,1,1,1,1,1,2,2,2,0,0,1,1,1,1,1,1,1,1],
        [1,1,1,1,4,0,2,3,3,0,0,1,1,1,1,1,1,1,1],
        [1,1,1,1,0,2,3,3,3,1,1,1,1,1,1,1,1,1,1],
        [1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1],
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] ];

Jeg har så en knap som sætter
mymap = mymap1

(så får den værdien af mymap1)

og som så kalder funktionen:

function buildMap() {
   
if (_root.myMap[5][5] == 4) {
charPos = [5, 5];
_root.myMap[5][5] = "0";
}
}

denne funktion checkker arrayen "mymap" og ændre i den hvis nogle parametrer er opfyldt.

nu kommer vi så til mit problem:

Den ændre også i mymap1 og det fatter jeg simpelthen ikke, er der nogen gode bud ???

/Henrik
Avatar billede flashdevil Nybegynder
28. august 2002 - 14:04 #1
prøv evt at kigge på denne sourcefil:

http://www.zapoo.dk/test.zip

/Henrik
Avatar billede barklund Nybegynder
28. august 2002 - 15:01 #2
For at forstå lidt, så kig på følgende:

i1 = 2;
i2 = 2;
// er de ens?
trace(i1 == i2);
// ja...

i1 = 2;
i2 = i1;
// er de ens?
trace(i1 == i2);
// ja...



a1 = [1,2];
a2 = [1,2];
// er de ens?
trace(a1 == a2);
// nej... hmm...

a1 = [1,2];
a2 = a1;
// er de ens?
trace(a1 == a2)
// ja... ahaa...



Begrebet hedder pass-by-reference. Simple variabler (strenge, tal og booleans) bliver overført med værdi. Når du laver:

s1 = "hej";
s2 = s1;

Så er s2 kun en kopi af s1 - det er ikke den samme. Hvis jeg ændrer s1, så bliver s2 uændret og omvendt. Det samme med tal og booleans.

Med funktioner og objekter er det dog anderledes. Sættes et objekt lig et andet, så er det en reference til præcis DET SAMME OBJEKT!!! Det bliver IKKE en kopi...

Altså:

a1 = [1,2];
a2 = a1;
a1[0] = 5;
trace(a2);
// giver "5,2"...

Skal man lave en kopi af et objekt, så skal man løbe det igennem og kopiere alle properties... Skal du kopiere et array, så gøres det ved:

a1 = [1,2];
a2 = new Array();
for (i = 0; i < a1.length; i++)
  a2[i] = a1[i];

trace(a2);
// giver "1,2"

trace(a1 == a2);
// de har samme objekter, men er ikke ens?
// Nej, det er ikke samme objekt!

a1[0] = 5;

trace(a2);
// giver "1,2"

trace(a1);
// giver "5,2"

Håber du forstår og ved, hvad du skal ændre, for at få dit til at virke (men det kræver 2 løkker inden i hinanden....)
Avatar billede flashdevil Nybegynder
28. august 2002 - 15:18 #3
kanon, jeg tænkte godt nok på om man skulle gøre det på en sådan måde.

Det vil jeg prøve barklund, tusind tak !

det kan godt være jeg lige vender tilbage hvis det ikke virker


/Henrik
Avatar billede barklund Nybegynder
28. august 2002 - 16:13 #4
En lille hjælp:

Array.prototype.duplicate2D = function() {
  var ret = new Array();
  for (i in this)
      ret[i] = this[i].slice(0,this[i].length);
  return ret;
}
test1 = [[1,2],[3,4]];
test2 = test1.duplicate2D();
trace("test1 before: "+test1[0]+" - "+test1[1]);
trace("test2 before: "+test2[0]+" - "+test2[1]);
test1[0][0] = 5;
trace("test1 after : "+test1[0]+" - "+test1[1]);
trace("test2 after : "+test2[0]+" - "+test2[1]);

(hvis du forstår?)
Avatar billede barklund Nybegynder
30. august 2002 - 14:11 #5
Du bør nok tilføje:

ASSetPropFlags(Array.prototype, "duplicate2D", 1);

Efter definitionen af funktionen... Så den er skjult...
Avatar billede flashdevil Nybegynder
30. august 2002 - 19:41 #6
takker !

Har fået det til at virke !

/Henrik
Avatar billede barklund Nybegynder
02. september 2002 - 13:42 #7
Så vil jeg da lige smide et svar :o)
Avatar billede flashdevil Nybegynder
02. september 2002 - 14:41 #8
så vil jeg da lige uddele point
Avatar billede barklund Nybegynder
02. september 2002 - 14:53 #9
Tarker :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester