Все истории

🔢 JavaScript отсортировал числа так: 1, 10, 2, 20. Он издевается?

Копия публикации из архива канала. Дата и текст сохранены.

Пишем вроде бы очевидное:
const nums = [20, 2, 10, 1];

nums.sort();

console.log(nums);

И получаем:
[1, 10, 2, 20]
Выглядит так, будто JavaScript решил проверить нашу психику 😄

Но причина простая: обычный sort() по умолчанию сравнивает элементы как строки.

То есть числа превращаются примерно в это:
"20", "2", "10", "1"

А дальше идёт сортировка как у текста:
"1"
"10"
"2"
"20"
Потому что "10" начинается с 1, а значит идёт раньше "2".

Чтобы сортировать именно числа, нужно явно сказать JavaScript, как их сравнивать:
nums.sort((a, b) => a - b);

Получим:
[1, 2, 10, 20]

А для сортировки по убыванию:
nums.sort((a, b) => b - a);

📌 Хорошее правило для новичка: если сортируешь числа в JavaScript — почти всегда передавай функцию сравнения.

JavaScript не издевается. Он просто в очередной раз сделал ровно то, что обещал, а не то, что мы ожидали.