sort в JavaScript: сортировка массива в JS

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 — это мощный инструмент для упорядочивания массивов, который поддерживает как простую сортировку, так и гибкие функции сравнения. Он часто используется при работе со списками данных, таблицами и пользовательскими коллекциями.