Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Метод sort() в JavaScript
sort() — это **встроенный метод массива**, который сортирует элементы массива на месте (in-place) и возвращает отсортированный массив. Это один из фундаментальных методов для работы с массивами в JavaScript.
Особенности sort()
In-place сортировка: метод изменяет исходный массив, а не создаёт новый:
const arr = [3, 1, 4, 1, 5, 9];
const result = arr.sort();
console.log(arr); // [1, 1, 3, 4, 5, 9] — исходный массив изменился
console.log(result === arr); // true — возвращается тот же массив
Сортировка по умолчанию происходит как сравнение строк (лексикографический порядок), что часто приводит к неожиданным результатам:
const numbers = [10, 5, 40, 25];
console.log(numbers.sort()); // [10, 25, 40, 5] — неправильно!
// Элементы сравниваются как '10', '25', '40', '5'
Использование функции сравнения
Для правильной сортировки нужна функция-компаратор, которая определяет порядок элементов:
// Числовая сортировка (по возрастанию)
const numbers = [10, 5, 40, 25];
numbers.sort((a, b) => a - b);
console.log(numbers); // [5, 10, 25, 40]
// По убыванию
numbers.sort((a, b) => b - a);
console.log(numbers); // [40, 25, 10, 5]
// Сортировка объектов
const users = [
{ name: 'Alice', age: 30 },
{ name: 'Bob', age: 25 },
{ name: 'Charlie', age: 35 }
];
users.sort((a, b) => a.age - b.age);
// Результат отсортирован по возрасту
Функция сравнения: правила
Функция должна возвращать:
- Отрицательное число: если первый элемент должен быть раньше второго
- 0: если элементы равны
- Положительное число: если первый элемент должен быть после второго
const compare = (a, b) => {
if (a < b) return -1; // a раньше b
if (a > b) return 1; // a после b
return 0; // равны
};
// Сложная сортировка
const items = [{id: 2, name: 'B'}, {id: 1, name: 'A'}];
items.sort((a, b) => a.id - b.id || a.name.localeCompare(b.name));
Производительность и стабильность
Временная сложность: O(n log n) в среднем (QuickSort или MergeSort)
Стабильность: с ES2019+ гарантирована стабильная сортировка — элементы с одинаковым ключом сортировки сохраняют исходный порядок.
Альтернативы
Если нужна новая отсортированная копия без изменения исходного массива:
// Spread operator
const sorted = [...arr].sort((a, b) => a - b);
// Метод slice()
const sorted = arr.slice().sort((a, b) => a - b);
Метод sort() — критически важный навык для работы с данными в JavaScript, и его понимание необходимо для любого разработчика.