Jonas: array kopieren, aber nicht als Referenz

Guten Tag,

EIn kleines Array-Problem:

Zunächst habe ich einen Array:

var a = new Array("Klaus","Peter");

Da ich diesen im Laufe des Scripts ändere, möchte ich die ursprünglichen Werte speichern, also versuche ich ihn zu kopieren:

var b = a;

Nun verändere ich Array a:

a[0] = "Ute";
a[1] = "Luise";

Damit verändere ich nur leider auch Array b:

alert(b[0]); // gibt "Ute" aus.

Anscheinend hab ich eine Referenz auf b gelegt, anstatt a zu kopieren.

Wie kann ich das verhindern und a wirklich kopieren?

Vielen Dank & besten Gruß, Jonas

  1. hi,

    Wie kann ich das verhindern und a wirklich kopieren?

    a als neues Array anlegen, b durchlaufen, und seine Werte als neue Elemente in a einfügen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. P.S.:

      Anscheinend hab ich eine Referenz auf b gelegt, anstatt a zu kopieren.

      Ja, Javascript arbeitet bei Objekten _immer_ mit Referenzen - und ein Array ist auch nur eine bestimmte Art von Objekt.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Hallo wahsaga & vielen Dank für die schnelle Antwort!

        a als neues Array anlegen, b durchlaufen, und seine
        Werte als neue Elemente in a einfügen.

        Ja, Javascript arbeitet bei Objekten _immer_ mit
        Referenzen - und ein Array ist auch nur eine bestimmte
        Art von Objekt.

        Diese Möglichkeit hatte ich auch schon in Betracht gezogen - es ist aber etwas umständlich.
        Gibt es nicht eine andere Möglichkeit? Etwa vorderhand ein neues eigenständiges Objekt zu intialisieren und diesem die Werte zuzufügen. Ich kann mir schwerlich vorstellen, dass Javascript für so ein häufiges Problem keine Routine zur Verfügung stellt.

        Aber gut, trotzdem herzlichen Dank & besten Gruß, Jonas

        1. Hi,

          Gibt es nicht eine andere Möglichkeit?

          Ab JS 1.2: var b = a.slice(0);

          Gruß, Cybaer

          --
          Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        2. Hi,

          Gibt es nicht eine andere Möglichkeit?

          BTW: Wie wäre es eigentlich, einfach mal in SELFHTML nachzuschlagen? Nur so als Anregung ...

          Gruß, Cybaer

          --
          Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        3. Gibt es nicht eine andere Möglichkeit? Etwa vorderhand ein neues eigenständiges Objekt zu intialisieren und diesem die Werte zuzufügen. Ich kann mir schwerlich vorstellen, dass Javascript für so ein häufiges Problem keine Routine zur Verfügung stellt.

          Das Problem existiert in allen Objekt orientierten Sprachen. In Javascript gibt es aber keinen copy Konstruktor. D.h. du musst ihn selbst bauen.

          Hierzu auch http://forum.de.selfhtml.org/archiv/2005/9/t115519/

          Struppi.

          --
          Javascript ist toll (Perl auch!)