PDA

Volledige versie bekijken : (array) itemSwap


theFlashWizard
%Europe/Berlin %046 %2005, 02:06
ey mensjes
kan iemand mij mischien uitleggen waarom ik hierbij:

posA = ["A","B","C"]
trace(posA);

Array.prototype.swapItem = function(a,b){
Temp = this
this[b] = this[a]
this[a] = Temp[b]
return this
}

posA = posA.swapItem(1,2)
trace(posA)

de output
A,B,C
A,B,B
en niet
A,B,C
A,C,B
krijg?

je zal begrijpen dat ik 2 array items van mekaars plek wil wisselen.
als iemand me (mischien wel stomme fout) ziet meld et ff (A)
Alvast bedankt

TheDutch
%Europe/Berlin %227 %2005, 06:27
Dit komt omdat je referenties naar elkaars item legt. Dat is eigenlijk hetzelfde verhaal dat we laatst hadden over een volledige array kopieëren met concat(). Wat er bij jou gebeurd is dat this[b] een referentie wordt naar this[a] en this[a] weer een referentie word naar Temp[b]. Op die manier krijg je dat this[b] en this[a] beide naar dezelfde waarde in de array Temp gaan refereren :).

Om dit op te lossen moet je ze eerst even in een variable zetten en dan die variable als waarde gebruiken om de array te veranderen:

Array.prototype.swapItem = function(a,b){
var replaceItem = this[a];
var withItem = this[b];
this[b] = replaceItem;
this[a] = withItem;
return this
}

theFlashWizard
%Europe/Berlin %256 %2005, 07:09
erg vreemd.. want ik dacht dat ik simpelweg a gelijk maakte aan b, en dan uit een tijdelijk aangeraakte array die orginele a neer te zetten bij b. Maar dan was die a in die exta array dus op de 1 of andere manier ook gewijzigt. terwijl ik die nooit daarvoor heb aangesproke..
maar je methode werkt idd wel.. thnx :)

TheDutch
%Europe/Berlin %313 %2005, 08:30
Je maakt this[b] niet gelijk aan this[a]. Je maakt van this[b] een referentie naar this[a], dat is een wezenlijk verschil. Vervolgens maak je van this[a] weer een referentie naar temp[b] dus word this[b] een referentie naar temp[b]. Zo werkt het binnen arrays in Flash. Zo kun je ook referenties naar objecten,arrays en MovieClips in een array zetten. Waarschijnlijk ziet een array, een array element niet als een waarde maar meer als een object met een waarde waarna het moet refereren :).

SaphuA
%Europe/Berlin %376 %2005, 10:02
Kan het niet laten :)
Array.prototype.swapItem = function(a,b){
var temp = this[a];
this[a] = this[b];
this[b] = temp;
return this
}
Zou ook moeten werken ;)

TheDutch
%Europe/Berlin %390 %2005, 10:21
Enige nadeel is dat op jouw manier this[a] nog steeds een referentie blijft naar this[b] en dus niet meer een eigen waarde heeft :).

SaphuA
%Europe/Berlin %443 %2005, 11:38
Nee hoor, want dan zou dit ook niet kunnen werken:
var a = ["een", "twee", "drie"];
var temp = a[0];
a[0] = a[2];
a[2] = temp;
trace(a);

TheDutch
%Europe/Berlin %494 %2005, 12:51
Vreemd, maar het werkt inderdaad :).