sort
— это метод массивов в JavaScript, который сортирует элементы массива на месте, изменяя исходный массив. По умолчанию сортировка происходит как строковая, что может привести к неожиданным результатам при работе с числами.
Синтаксис метода sort
array.sort(compareFunction)
compareFunction
— необязательная функция сравнения, которая определяет порядок сортировки.- Если функция не передана, элементы сортируются как строки в порядке Unicode.
Пример сортировки строк
const fruits = ['banana', 'apple', 'cherry'];
fruits.sort();
console.log(fruits); // ['apple', 'banana', 'cherry']
Проблемы сортировки чисел
При работе с числами сортировка по умолчанию приводит к неправильному результату:
const numbers = [10, 5, 40, 1];
numbers.sort();
console.log(numbers); // [1, 10, 40, 5]
Массив отсортировался как строки. Чтобы корректно отсортировать числа, требуется функция сравнения.
Использование функции сравнения
Функция сравнения принимает два элемента и возвращает:
- отрицательное число, если первый элемент должен идти перед вторым;
- положительное число, если первый элемент должен идти после второго;
- ноль, если порядок не имеет значения.
Пример числовой сортировки:
const numbers = [10, 5, 40, 1];
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 5, 10, 40]
Сортировка в обратном порядке
Для сортировки по убыванию порядок аргументов меняется:
numbers.sort((a, b) => b - a);
console.log(numbers); // [40, 10, 5, 1]
Сортировка объектов по свойству
При сортировке массива объектов функция сравнения может использовать свойства объектов:
const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 20 },
{ name: 'Charlie', age: 30 }
];
users.sort((a, b) => a.age - b.age);
console.log(users);
// [
// { name: 'Bob', age: 20 },
// { name: 'Alice', age: 25 },
// { name: 'Charlie', age: 30 }
// ]
Сортировка строк с учетом регистра
По умолчанию sort
различает заглавные и строчные буквы. Для сортировки без учета регистра текст нужно привести к одному регистру:
const words = ['Banana', 'apple', 'Cherry'];
words.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));
console.log(words); // ['apple', 'Banana', 'Cherry']
Особенности sort
- Метод изменяет исходный массив.
- Сортировка не всегда стабильна (в старых версиях браузеров).
- Без функции сравнения все элементы автоматически преобразуются в строки и сравниваются по кодам символов Unicode.
sort
в JavaScript — это мощный инструмент для упорядочивания массивов, который поддерживает как простую сортировку, так и гибкие функции сравнения. Он часто используется при работе со списками данных, таблицами и пользовательскими коллекциями.