Nehmen wir an, ich wollte eine Sortierfunktion, die eine sortierte Kopie des eingegebenen Arrays zurückgibt. Ich habe naiverweise Folgendes versucht
function sort(arr) {
return arr.sort();
}
und ich habe es damit getestet, was zeigt, dass meine sort
Methode verändert das Array.
var a = [2,3,7,5,3,7,1,3,4];
sort(a);
alert(a); //alerts "1,2,3,3,3,4,5,7,7"
Ich habe auch diesen Ansatz ausprobiert
function sort(arr) {
return Array.prototype.sort(arr);
}
aber es funktioniert überhaupt nicht.
Gibt es eine einfache Möglichkeit, um dies zu umgehen, vorzugsweise ein Weg, der nicht Hand-Rolling meine eigenen Sortieralgorithmus oder Kopieren jedes Element des Arrays in eine neue erfordert?
1 Stimmen
Eine tiefe Kopie des Arrays erstellen und es stattdessen sortieren.
2 Stimmen
@evanmcdonnal Eine flache Kopie könnte ausreichen, wenn alles, was gewünscht ist, ist eine Neuordnung und nicht ein Duplikat von jedem Element in dem Array.
0 Stimmen
.sort
erfordert diethis
Wert das Array sein. Damit das letzte Snippet funktioniert, müssen Sie also.sort.call(arr)
(obwohl das Ihr Problem nicht löst).0 Stimmen
@Kekoa Ja, das ist ein guter Punkt. Es gibt keinen Grund, mehr Speicherplatz zu verbrauchen, wenn Sie nur die Reihenfolge der Elemente und nicht die Elemente selbst ändern wollen.
0 Stimmen
Die Methode von zzzzBov funktioniert wie ein Zauber! stackoverflow.com/a/9592774/7011860