2016-08-09 12 views
1

Dies scheint wie eine einfache Frage, aber ich kann nicht viele Informationen dazu finden.Speichern Sie das Ergebnis von array.sort in einer anderen Variablen

var array1 = new Array(4, 3, 1, 2, 0, 5); 
var array2 = array1; 
array2.sort(function(a, b) { 
    return a - b; 
}) 

Erwartetes Verhalten: array2 sortiert und array1 ist in der ursprünglichen Reihenfolge mit 4.

Tatsächliche Ergebnisse, beginnend: beide Arrays sortiert werden.

Wie kann ich array1 sortieren - während array1 beibehalten und die Ergebnisse der Sortierung in array2 gespeichert werden? Ich dachte, dass array2 = array1 die Variable kopieren würde, nicht auf sie verweisen. In der Firefox-Konsole erscheinen beide Arrays jedoch sortiert.

+3

'var array2 hilft = array1.slice(); ' – Tushar

+0

Warum ist das Standardverhalten der Verweis auf das ursprüngliche Array, anstatt es zu kopieren? – tomysshadow

+0

http://stackoverflow.com/questions/7486085/copying-array-by-value-in-javascript. Einige Methoden führen Änderungen in Referenz aus, einige erstellen neue Arrays. Überprüfen Sie die Array-Dokumentation. –

Antwort

0

You can copy a array with slice method

var array1 = new Array(4, 3, 1, 2, 0, 5); 
var array2 = array1.slice(); 
+2

Beachten Sie, dass dies eine flache Kopie erstellt, die für das Zahlenfeld des OPs in Ordnung sein sollte, aber möglicherweise mit einem Array von Objekten nicht ausreicht. – nnnnnn

1

Das ist mit var array2 = array1; Sie machen einen neuen Verweis auf das Objekt, so dass jede Manipulation an Array2 Array1 betrifft, da sie im Grunde das gleiche Objekt sind.

JS bietet keine propner clone Funktion/Methode, so versuchen, diese weithin angenommen workarround:

var array1 = new Array(4, 3, 1, 2, 0, 5); 
var array2 = JSON.parse(JSON.stringify(array1)); 
array2.sort(function(a, b) { 
    return a - b; 
}); 

Hope it :)

+0

* "Sie machen eine flache Kopie des Objekts," - Nein, Sie machen überhaupt keine Kopie des Objekts, Sie machen nur eine zweite Referenz auf das gleiche Objekt. – nnnnnn

+0

@nnnnnn das ist genauer – alex030293

Verwandte Themen