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();