Volledige versie bekijken : Niet linken?
SaphuA
%Europe/Berlin %747 %2005, 18:56
Hey lui,
Nou heb ik eens een vraag :)
Zit met een klein probleempje, niets ernstigs maar het zou fijn zijn als 't opgelost kan worden.
Ik maak een array, en deze wil ik kopieren in een andere variable. Klinkt simpel, maar als ik het doe gebeurd er hetvolgende:var basis = ["een", "twee", "drie"];
var nieuw = basis;
nieuw.splice(0, 3);
trace(basis);Zoals je ziet, wordt nieuw een link naar basis, ipv een kopie.
WWWHHYYYYY!?!?!
Kusj
~Sph
mateo)
%Europe/Berlin %758 %2005, 19:12
alleen de reference wordt gekopieerd. dat is standaard voor arrays. om daadwerkelijk een kopie te maken moet je met een for loop alle waarden overzetten naar een nieuw array.
Flasher
%Europe/Berlin %765 %2005, 19:21
Of gewoon zo:
var nieuw = basis.concat()
mateo)
%Europe/Berlin %829 %2005, 20:54
yep, veel beter dan een for loop :)
TheDutch
%Europe/Berlin %831 %2005, 20:57
concat() is inderdaad een goede. Maar dit is officieel de meest nette oplossing ;).
var nieuw = new Array(basis);
mateo)
%Europe/Berlin %848 %2005, 21:21
nee, dat kan dus niet, dan krijg je weer een reference... :(
SaphuA
%Europe/Berlin %848 %2005, 21:22
Of gewoon zo:
var nieuw = basis.concat()
Ah dat zocht ik :) thnx
TheDutch
%Europe/Berlin %853 %2005, 21:28
nee, dat kan dus niet, dan krijg je weer een reference... :(
Nee hoor, dan doe je echt wat fout :).
mateo)
%Europe/Berlin %860 %2005, 21:38
var basis:Array = [1,2,3,4,5,6,7,8];
var nieuw1:Array = basis.concat();
var nieuw2:Array = new Array(basis);
basis.push(9);
trace(nieuw1);
trace(nieuw2);
TheDutch
%Europe/Berlin %864 %2005, 21:44
Niet helemaal zoals je denkt ;).
Wanneer je niets met nieuw2 doet blijft het inderdaad loyaal aan basis. Echter wanneer je nieuw2 pushed of spliced heeft dat geen effect op basis omdat het vanaf dat moment los staat van elkaar :).
mateo)
%Europe/Berlin %870 %2005, 21:53
feit blijft dat de arrays gekoppeld blijven, ook al is dat alleen maar een kant op, en dat geeft onverwachte resultaten. misschien dat er situaties zijn waarin je zo'n parent child relatie wil laten bestaan en dat dit misschien handig is, maar het is normaal gesproken veel overzichtelijker om met zo'n concat() te werken.
TheDutch
%Europe/Berlin %880 %2005, 22:07
Wanneer je een exacte kopie wilt zonder dat er enige koppeling blijft bestaan, is concat() inderdaad de beste oplossing :).
mateo)
%Europe/Berlin %883 %2005, 22:12
ha, dat wou ik horen :)
TheDutch
%Europe/Berlin %889 %2005, 22:20
Wist ik wel ;).
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.