Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 20-06-2004, 12:06   #1 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Ort: Stuttgart
Beiträge: 5
Array wird unfreiwillig verändert

Ich habe 20 Punkte, deren x/y Positionen in baseARR abgelegt sind.
Dieses Array ist praktisch die Ursprungsquelle und soll nicht verändert werden. Deshalb gibt es ein zweites Array mit folgendem Code:

var containerARR = baseARR.slice(0);

wenn ich das richtig verstanden habe, wird per slice ein neues Array erstellt, die kette zu baseARR also unterbrochen.

In der folge werden einige Werte in containerARR in bestimmten Intervallen verändert, aber ärgerlicherweise ändert sich dabei dann auch immer gleich baseARR mit. Wie kann das sein?

Ich habe die Datei mal angehängt. Komme seit gestern nicht mehr weiter. Ihr seid meine letzte Hoffnung.

Vielleicht kann mir jemand auch einfach sagen, wie man eine kopie eines Arrays erstellt ohne dass dabei die geringste Verbindung zum Originial bestehen bleibt.

Gruß und Danke,
Matthias
jakubek ist offline   Mit Zitat antworten
Alt 20-06-2004, 12:14   #2 (permalink)
FlashLove@FirstSight
 
Benutzerbild von FLASHStyler
 
Registriert seit: Feb 2003
Beiträge: 2.460
Eigentlich müsste dies nicht sein, denn:

slice() kopiert einen Teil des Arrays und liefert diesen als neues Array zurück.

PHP-Code:
hauTiere = ["Katze""Hund""Papagei""Goldfisch"];

//Kopiert ein oder mehrere Elemente des Arrays und erzeugt
//ein neues Array mit den kopierten Elementen
//Ausgabe: Hund, Papagei
meineTiere hausTiere.slice(13); 
Beispiel aus dem Buch von Madokan entnommen.

PS: Ich sehe hier kein Beispiel
__________________
www.johannes-erhardt.com | blog | xing me baby

Geändert von FLASHStyler (20-06-2004 um 12:15 Uhr)
FLASHStyler ist offline   Mit Zitat antworten
Alt 20-06-2004, 12:16   #3 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
dürfte eigentlich nicht sein
is ds problem in nem kleineren kontext reproduzierbar?

etwas in der art
PHP-Code:
a=[1,2,3,4,5,6]
b=a.slice(0)
a.reverse() 
natürlich wird a umgekehrt und b nicht
bei dir muss also irgendwo die base verändert werden-explizit- oder eventuell stellste an anderer stelle doch ne verküpfung mit dem bearbeitungsarray her

deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 20-06-2004, 15:06   #4 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Ort: Stuttgart
Beiträge: 5
Nur die Array-Mutter wird kopiert...

Danke für die Antworten, ich hab tatsächlich mal diesen minitest gemacht und ich glaube, ich ahne langsam, woran es liegt. Trotzdem komme ich jetzt nicht weiter.
Das Problem liegt bei der mehrdimensionalität:

a=[[1,2],[3,4],[5,6]];
b=a.slice(0)

wenn ich jetzt b[0][1]=333 zuweise, wird das auch bei a widergespiegelt. Das heisst, es wird zwar eine Kopie vom Mutter-Array erzeugt, die Kinder bleiben aber mit dem Original verbunden.

Ich brauche jetzt eine einfache Funktion, die erst überprüft, ob ein element ein array ist und falls ja dieses dann ebenfalls sliced...

kann da jemand helfen??? Ich pack's nicht.
jakubek ist offline   Mit Zitat antworten
Alt 20-06-2004, 17:32   #5 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
PHP-Code:
a=["hallo",[3,4],[5,6]]; 
b=[]
for(var 
i=0;i<a.length;i++){
    
typ=typeof a[i] =="object" && a[i].join!=undefined
    b
.push(typ a[i].concat() : a[i])
        

objekte (im sinne von {x:1} werden allerdings so nicht kopiert, brauchste wahrscheinlich nicht

deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 20-06-2004, 18:20   #6 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Ort: Stuttgart
Beiträge: 5
cool, danke! Ich raff's zwar noch nicht ganz, werd es aber gleich mal testen. Nochmals vielen Dank!

Gruß, Matthias
jakubek ist offline   Mit Zitat antworten
Alt 20-06-2004, 18:26   #7 (permalink)
Neuer User
 
Benutzerbild von :: RK ::
 
Registriert seit: Jan 2002
Ort: Umgebung Stuttgart
Beiträge: 5.412
hi,

Zitat:
Zitat von jakubek
...
Vielleicht kann mir jemand auch einfach sagen, wie man eine kopie eines Arrays erstellt ohne dass dabei die geringste Verbindung zum Originial bestehen bleibt.
meist ist der einfachste weg auch der beste ( hoffe deine Frage richtig verstanden zu haben, habs nur überflogen )

PHP-Code:
myArr1 = ["Hallo""Test"12345]
myArr2 myArr1;
delete myArr1;
trace(myArr2); 
__________________
Das Glück im Leben hängt von den guten Gedanken ab, die man hat.

Easing_Equations / Flash Kontaktformular / FlashPlugin W3C konform / Nützliche Beiträge zu FAQs

Geändert von :: RK :: (20-06-2004 um 18:27 Uhr)
:: RK :: ist offline   Mit Zitat antworten
Alt 20-06-2004, 19:05   #8 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
ne er brauch doch sein anfangsarray später
du änderst praktisch nur den variablennamen
und sowas funktioniert natürlich dann auch nicht, was dem sinn schon näher käme
PHP-Code:
c=[[1,2],[3,4]]
b=c
a
=c
delete c 
a wird von b nun abhängen
entgegen der vermutung dass beide eine vollständige kopie von c bekommen

deluxe
Deluxe ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 12:46 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele