Javascript-Arrays kopieren und aus Objekten erstellen

Javascript bietet von Haus aus keine Clone- oder Copy-Funktionen an. Nun kann man diese recht aufwändig selbst schreiben, oft bieten feste Javascript-Methoden aber bereits eine Lösung.

Arrays flach kopieren

Die Array-Methode Slice erstellt eine Kopie eines Teil-Arrays. Hier kann man die Indizes  weglassen, um so das gesamte Array als flache Kopie zu erhalten.

var x = [1,2,3], y;
y = x.slice();
y.shift();
console.log(y); // [2, 3]
console.log(x); // [1, 2, 3]

Es gibt anscheinend verschiedene Sichtweisen, ob man Slice mit dem ersten Parameter 0 aufruft oder nicht. Die Firefox-Dokumentation stellt ihn nicht als optional da. Meine Praxistests haben aber keine Probleme gezeigt, wenn man die 0 weglässt.

Parameters-Objekt in Array konvertieren

Man kann diesen Ansatz leicht erweitern und auf arrayartige Objekte anwenden. Der bekannteste Vertreter ist sicherlich das Objekt Arguments, das innerhalb einer jeden Funktion genutzt werden kann, um generisch auf die übergebenen Argumente zuzugreifen. Da Arguments aber ein Objekt ist, enthält es keine Array-Methoden. Wenn man diese braucht, kann man dank Javascripts Call- bzw. Apply-Funktionalität das obige Beispiel auch in diesem Zusammenhang nutzen:

function a() {
  var args = Array.prototype.slice.call(arguments);
  console.log(Array.isArray(arguments)); // false
  console.log(Array.isArray(args));      // true
}