PDA

Volledige versie bekijken : arrays stiekem verbonden?


theFlashWizard
%Europe/Berlin %727 %2005, 18:27
ey mensjes
ik heb n btje n raar probleem met array's.
ik wil om de zoveel tijd een item uit een array maken, maar dit item moet dan wel meteen uit de array gehaalt worden. Als de array dan leeg is moet hij weer opnieuw beginnen.
dit wil ik gebruiken om iets random te doen maar toch gelijk wil verdelen.

kan iemand mij uitleggen waarom dit wel werkt:
myArray = [10,20,30]
orgArray = [10,20,30]
setInterval(testArray,500)
function testArray() {
R = makeRandom(0,myArray.length)
item = myArray.splice(R,1))
trace(item)

if(myArray.length == 0){
myArray = [10,20,30]
}
}
function makeRandom(min,max){
return Math.floor(Math.random()*(max-min)+min)
}
en dit niet:
myArray = orgArray = [10,20,30]
setInterval(testArray,500)
function testArray() {
R = makeRandom(0,myArray.length)
item = myArray.splice(R,1))
trace(item)

if(myArray.length == 0){
myArray = orgArray
}
}
function makeRandom(min,max){
return Math.floor(Math.random()*(max-min)+min)
}
?

het lijkt erop dat hij die array's met mekaar verbind, als je namelijk van het 2de voorbeeld n item uit myArray haalt wordt die ook uit orgArray gehaalt. :S

alvast bedankt!

Voetsjoeba
%Europe/Berlin %735 %2005, 18:39
Heel logisch - wat je hier doet is 2 variabelen naar hetzelfde fysieke object in het geheugen verwijzen. Bij het 2de maakt het dus geen verschil of je myArray of orgArray gebruikt, want ze verwijzen allebei naar dezelfde array in het geheugen van de computer. Bij de eerste is dit niet het geval, want je maakt een aparte array voor elke variabele.

Klein voorbeeld:
obj = obj2 = {foo:"bar"};
trace(obj.foo);
trace(obj2.foo);
trace("-----------");

delete obj;
trace(obj2.foo);
trace(obj);

Hier laat je obj en obj2 allebei verwijzen naar hetzelfde fysieke object in het geheugen. Als je echter obj delete, dan zal het fysieke object nog bestaan omdat obj2 er nog naar verwijst (Flash verwijdert alleen maar fysieke objecten als er geen verwijzingen meer naar bestaan). Daarom kun je via obj2 nog altijd hetzelfde fysieke object aanspreken, maar heeft Flash wel de ene verwijzing die obj vormde verwijderd. Dat neemt niet weg dat er nog een is.

theFlashWizard
%Europe/Berlin %759 %2005, 19:13
ow... ik snap em.. :)
ik zag een array eigenlijk etzelfde als een waarde..
net als dat je met 2 verschillende vars naar een mc zou verwijze..

maar hoe kan ik dan 1x een array samen stellen en daar 2 losse array's van maken?

bijv
myArray = new Array(orgArray)
werkt ook nie..

Voetsjoeba
%Europe/Berlin %766 %2005, 19:24
Een gemakkelijke manier is om een subsectie van de array te nemen, die de hele array omvat. Dat doe je gewoon zo:


foo = new Array("a", "b", "c");
bar = foo.slice();
trace(bar);

theFlashWizard
%Europe/Berlin %778 %2005, 19:41
thnx dat is idd de oplossing :)

Voetsjoeba
%Europe/Berlin %785 %2005, 19:51
No problemo :)

SaphuA
%Europe/Berlin %890 %2005, 22:22
foo = new Array("a", "b", "c");
bar = foo.concat();
trace(bar);
Is de 'officele' oplossing :)

Dauntless
%Europe/Berlin %896 %2005, 22:30
En hoe doe je dat voor objecten? Was er een hele tijd geleden mee aan het sukkelen ...

theFlashWizard
%Europe/Berlin %907 %2005, 22:46
waarom is concat beter dan slice?

SaphuA
%Europe/Berlin %966 %2005, 00:12
waarom is concat beter dan slice?
Straight from Flash help :)
value0,...valueN Numbers, elements, or strings to be concatenated in a new array. If you don’t pass any values, a duplicate of my_array is created.

Roenes
%Europe/Berlin %983 %2005, 00:35
If you don't pass any parameters, a duplicate of the original array is created.Staat ook precies zo in de help bij slice. Dus volgens mij is geen van beide 'beter'. Ze doen nl precies hetzelfde als je geen parameters invult :)

SaphuA
%Europe/Berlin %433 %2005, 11:24
Staat ook precies zo in de help bij slice. Dus volgens mij is geen van beide 'beter'. Ze doen nl precies hetzelfde als je geen parameters invult :)
Ohja? Ik had het nog nagekeken maar bij mij kon ik het niet vinden :D
Dan laat mijn idee maar achterwegen.. :(

Dauntless
%Europe/Berlin %489 %2005, 12:44
Weet er iemand het antwoord op mijn vraag?

Roenes
%Europe/Berlin %500 %2005, 13:00
Met een for loop door het object heen lopen en iedere prop met zijn waarde copieren naar een nieuw object? Volgens mij is er niet net zoals bij array een methode voor :)