← Назад к вопросам

Каким методом является sort?

1.0 Junior🔥 171 комментариев
#JavaScript Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Метод 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, и его понимание необходимо для любого разработчика.

Каким методом является sort? | PrepBro