Przejdź do głównej zawartości

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