Kopiowanie tablic w JavaScript

Nie wiem czy był to tzw. “fakt oczywisty”, który pominąłem w bezmiarze moich skryptów, ale okazało się że kopiowanie tablic w JavaScript to nie jest taka prosta sprawa. Namęczyłem się sromotnie nad prostą sprawą, które polegała na tym, że potrzebowałem skopiować tablicę i posortować jej elementy w kopii tejże tablicy.

Sprawa wydawać by się mogła prosta:

var tablica = [3,2,2,1,4];
var kopiaTablicy = tablica;
kopiaTablicy.sort();

I co najciekawsze… posortowane zostaną obie tablice 😉
poprawne rozwiązanie jest następujące:

var tablica = [3,2,2,1,4];
var kopiaTablicy = tablica.slice();
kopiaTablicy.sort();

i teraz działa.

Jako bonus podpowiem, że sortowanie .sort() działą alfabetycznie, więc wartośc 01 i 1 zostaną posortowane niepoprawnie. Można sobie więc dodać funkcję do sortowania liczbowo.

Array.prototype.sortNum = function() {
    return this.sort( function (a,b) { return a-b; } );
}
kopiaTablicy.sortNum();