Javascript, Array, Objekte kopieren
bearbeitet von FranzHallo
an Rolf:
Mittels Google bin ich als erstes auf den alten Artikel zu contact() auf <http://www-hera-b.desy.de/subgroup/computing/IT/www/selfhtml/javascript/objekte/array.htm#concat> gestoßen.
Unter "Beachten Sie:" steht dann der Hinweis wie ich mir den z.B. auch im heutigen Wiki gewünscht hätte (da nennt sich der Bereich "Beachten Sie:").
Mit unter zur Hilfenahme der hiesigen Suchfunktion bin ich dann auf den Eintrag
"Enthält das Array ein Objekt, wird nur die Objektreferenz gedoppelt. D.h. die Kopie und das Original zeigen danach auf das gleiche Objekt. Wenn man das nicht will, braucht man einen deep clone Algorithmus, der auch die referenzierten Objekte doppelt - und zwar rekursiv, denn die können ja auch wieder auf Objekte zeigen. Das ist nicht trivial - solche Verweisketten können geschlossen sein und das würde eine Endlosrekursion hervorrufen."
unter <https://forum.selfhtml.org/self/2021/oct/26/javascript-reference-types-beispiel-und-frage/1793056#m1793056>
gestoßen wo allerdings auf den erwähnten "deep clone Algorithmus" nicht weiter eingegangen wurde und das für mich er böhmische Dörfer sind.
Dann gibt es noch diese Aussage:
"Dazu musst du eine Kopie des Arrays erzeugen. Eine einfache Zuweisung gibt nur die Referenz weiter. Beide Eigenschaften zeigen damit auf dasselbe Array. Eine einfache Kopie kann mit .slice() (ohne Parameter) angelegt werden. Damit wird das Array kopiert. Da du Strings als Inhalte hast, werden diese kopiert. Bei Objekten würden nur die Referenzen kopiert werden."
<https://forum.selfhtml.org/self/2021/oct/26/javascript-reference-types-beispiel-und-frage/1793050#m1793050>
Deine Beispiele sind recht einfacher Natur. Ich müsste einen ganzen Satz Objekt kopieren, wobei ich nur die Schlüssel, Werte und die Länge des Hautarrays (camListe) benötige. Es gibt auch nur Text bzw. Zahlen und keine Symbole.
Was genau ist mit dem "Spread-Operator" gemeint?
Ich werde wohl mal die Version von Gunnar Bittersmann mit Array.from(a) und Object.create(A) testen.
Wenn das nicht funktioniert kann ich vielleicht noch analog per Doppelschleife die einzelnen Einträge abfragen und neu hinzufügen was meinen Code wohl ziemlich aufblähen wird.
vielen Dank für die Vorschläge
Javascript, Array, Objekte kopieren
bearbeitet von FranzHallo
an Rolf:
Mittels Google bin ich als erstes auf den alten Artikel zu contact() auf <http://www-hera-b.desy.de/subgroup/computing/IT/www/selfhtml/javascript/objekte/array.htm#concat> gestoßen.
Unter "Beachten Sie:" steht dann der Hinweis wie ich mir den z.B. auch im heutigen Wiki gewünscht hätte (da nennt sich der Bereich "Beachten Sie:").
Mit unter zur Hilfenahme der hiesigen Suchfunktion bin ich dann auf den Eintrag
"Enthält das Array ein Objekt, wird nur die Objektreferenz gedoppelt. D.h. die Kopie und das Original zeigen danach auf das gleiche Objekt. Wenn man das nicht will, braucht man einen deep clone Algorithmus, der auch die referenzierten Objekte doppelt - und zwar rekursiv, denn die können ja auch wieder auf Objekte zeigen. Das ist nicht trivial - solche Verweisketten können geschlossen sein und das würde eine Endlosrekursion hervorrufen."
unter <https://forum.selfhtml.org/self/2021/oct/26/javascript-reference-types-beispiel-und-frage/1793056#m1793056>
gestoßen wo allerdings auf den erwähnten "deep clone Algorithmus" nicht weiter eingegangen wurde und das für mich er böhmische Dörfer sind.
Dann gibt es noch diese Aussage:
"Dazu musst du eine Kopie des Arrays erzeugen. Eine einfache Zuweisung gibt nur die Referenz weiter. Beide Eigenschaften zeigen damit auf dasselbe Array. Eine einfache Kopie kann mit .slice() (ohne Parameter) angelegt werden. Damit wird das Array kopiert. Da du Strings als Inhalte hast, werden diese kopiert. Bei Objekten würden nur die Referenzen kopiert werden."
<https://forum.selfhtml.org/self/2021/oct/26/javascript-reference-types-beispiel-und-frage/1793050#m1793050>
Deine Beispiele sind recht einfacher Natur. Ich müsste einen ganzen Satz Objekt kopieren, wobei ich nur die Schlüssel, Werte und die Länge des Hautarrays (camListe) benötige. Es gibt auch nur Text bzw. Zahlen und keine Symbole.
Was genau ist mit dem "Spread-Operator" gemeint?
Ich werde wohl mal die Version von @@Franz mit Array.from(a) und Object.create(A) testen.
Wenn das nicht funktioniert kann ich vielleicht noch analog per Doppelschleife die einzelnen Einträge abfragen und neu hinzufügen was meinen Code wohl ziemlich aufblähen wird.
vielen Dank für die Vorschläge