Frage

Hier ist ein Code, der zwei Arrays (np und op) hat, eine Kopie des anderen

Allerdings, wenn ich die Kopie ändern, wird das Original auch geändert! werfen Sie einen Blick:

<script type="text/javascript">
var op=new Array(0, 0);
var np=op;
np[1]=2;
document.write(op+"<br>")
document.write(np)
</script>

Gibt es eine Möglichkeit das Original und ändern Sie die Kopie zu behalten?

War es hilfreich?

Lösung

Sie nie eine Kopie des Arrays hergestellt. Sie einfach das Array zu einer anderen Variablen zugewiesen. Dies kopiert nicht in Javascript. In Ihrem Beispiel gibt es nur ein Array mit zwei Variablen, mit denen Sie darauf zugreifen können. Es gibt keine integrierte Möglichkeit, Arrays in Javascript zu kopieren, so dass Sie Ihre eigene Funktion schreiben müssen, um es zu tun.

Hier finden Sie aktuelle diese Frage Stackoverflow für einen Hinweis, wie man tatsächlich umsetzen das Kopieren der Elemente in dem Array.

Andere Tipps

Einige der in Array-Funktionen gebaut werden eine Kopie tatsächlich für Sie erstellen. Ein solcher ist in Scheiben schneiden.

Zum Beispiel:

var op=new Array(0, 0);
var np= op.slice(0);
np[1]=2;
document.write(op+"<br>")
document.write(np)

Referenz http://my.opera.com/GreyWyvern/blog/ show.dml / 1725165

Was Sie tun, ist nicht eine Kopie des Arrays erstellen, es ist nur eine Kopie der Referenz auf das Array zu schaffen, so dass Sie zwei Referenzen auf das gleiche Array-Objekt erhalten.

Dies ist, wie Sie eine tatsächliche Kopie des Arrays erstellen:

var np = op.concat();

Die concat Methode erstellt ein neues Array, das eine Kopie des Arrays mit irgendwelchen zusätzlichen Elementen hinzugefügt ist. Wenn Sie keine zusätzlichen Elemente angeben, erhalten Sie nur eine Kopie des Arrays.

Array.prototype.copy = function() {
    return this.slice(0, this.length);
  }

Dann


var op=new Array(0, 0);
var np=op.copy();
np[1]=2;
document.write(op+"<br>")
document.write(np)

Sie sollten das zweite Array klonen, anstatt sie zu kopieren.

--- aktualisieren

Wenn Sie ein Objekt einer Variablen zuweisen, wird nur der Verweis kopiert wird (dh, sie beide auf die gleichen Daten). Für eine unabhängige Kopie dieses Objekts mit müssen Sie es klonen. Und es gibt mehrere Möglichkeiten, wie man dies zum Beispiel hier ist die Art und Weise Objekt mit jQuery des Klonens.

Sie können nur die native slice Methode verwenden, die eine Kopie des Arrays zurückgibt:

var np = op.slice(0,op.length);

Der zweite Parameter sollte optional sein, aber in IE Ich glaube, es erforderlich ist.

Ihr Code, komplett mit der Änderung:

var op=new Array(0, 0);
var np=op.slice(0,op.length);
np[1]=2;
document.write(op+"<br>")
document.write(np)

Um ein neues Array erstellen Sie vielleicht prüfen wollen:

   var op = [];

ein Array kopieren:

var np=op.slice();

oder

var np=op.concat();

Concat ist schneller, während Scheibe ein Zeichen weniger in Anspruch nimmt. Einige Leute alias „Scheibe“ oder „concat“ als „Kopie“, so dass es mehr ist offensichtlich, dass Sie eine Kopie machen.

Keine Notwendigkeit für Parameter in jedem Fall. Die Parameter in der Scheibe wird nur der Code größer und langsamer machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top