Пишем вроде бы очевидное:
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 не издевается. Он просто в очередной раз сделал ровно то, что обещал, а не то, что мы ожидали.