Bug #049
🪲 Znajdź buga
const numbers = [43, 12, 1, 5, 26]
console.log(numbers.sort())
Chcemy posortować tablicę z liczbami od najmniejszej do największej.
Czy do konsoli zostanie zalogowana właściwa kolejność?
🧪 Rozwiązanie
const numbers = [43, 12, 1, 5, 26]
const compareNumbers = (a, b) => a - b
console.log(numbers.sort(compareNumbers))
W przykładzie z błędem zostanie zalogowana tablica 1,12,26,43,5
.
Wyraźnie została ona zmieniona względem oryginału, ale sortowanie nastąpiło nie według wartości liczbowych, a alfabetycznych.
Domyślne działanie metody sort()
polega na sprowadzeniu porównywanych wartości do ciągów znaków i posortowaniu ich według tablicy kodowania znaków UTF-16.
1
występuje przed 2
tak samo jak a
przed b
.
Kolejność 1,12,26...
można więc porównać np. do a,ab,bf...
.
Aby posortować wartości z tablicy pod kątem liczbowym, musimy samodzielnie napisać funkcję porównującą i przekazać ją jako argument do funkcji sort()
.
🎢 Plac zabaw
Otwórz edytor w nowym oknie📑 Linki
❤️ Podobają Ci się bugi JS?
Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js