Сортировка в JavaSсript с помощью метода sort()

12:36 20 марта 2020

Сортировка в javascript. Метод sortМетод sort() может помочь вам сортировать массив, причем не только стандартно, но и с указываемыми параметрами, а также делать сортировку объектов, находящихся в массиве. Для сортировки массивов в JavaScript предусмотрен метод array.sort(). К сожалению, этот метод зачастую неверно понимается не только новичками в программировании, но и опытными специалистами, которые, кроме того, склонны его недооценивать.

При вызове метода sort() производится упорядочивание массива в алфавитном порядке де-факто. Однако этот метод обладает большими возможностями.

Сортировать массив в алфавитном порядке

Такая сортировка производится элементарно. Необходимо вызвать array.sort(), не задавая ему какие-либо параметры:

let girls = ["Ирина", "Наталья", "Елена"]

girls.sort()

// Массив принимает вид - ["Елена", "Ирина", "Наталья"]

Новый массив сформирован в возрастающем порядке. Для его изменения на убывающий необходимо использовать метод reverse() совместно с sort(). так как показано на следующем примере:

var girls = ["Ирина", "Наталья", "Елена"];

girls.sort();

girls.reverse();

//Результат - ["Наталья", "Ирина", "Елена"];

Обратите, пожалуйста, внимание! Метод array.sort() сортирует массив только в лексикографическом порядке!

Это свойство наглядно отражено в примере:

let nums = [7, 50, 400];

nums.sort();

// Результат оказывается таким - [400, 50, 7]

В лексикографическом смысле семерка больше, чем 400 и 50. Поэтому, несмотря на то, что 7 в числительном порядке меньше этих значений, в новом массиве она занимает последний индекс.

Как передать функцию в array.sort()

Метод array.sort() допускает использование функций в качестве дополнительных параметров. Синтаксис в этом случае принимает следующий вид:

function params(x, y) {

// Производится сравнение x и y, вернет значение = единице или -1.

}
array.sort(params);

Массив будет отсортирован на основе связи между возвращаемой функцией значением и параметрами x и y. Функция всегда возвращает три числа: > 0, 0 и < 0. Если возвращаемое значение меньше нуля индекс x в массиве будет меньше индекса y. Если больше 0, индекс y будет меньше индекса x. Если возвращен нуль, массив не сортируется, поскольку x и y расцениваются методом как тождественные величины.

Функция в окончательном виде:

function params(x, y){

return (x — y);

}

Упорядочить элементы массива в числовом порядке

Для этого следует передать функцию, в рассматриваемом случае function params, которая вернет остаток от вычитания x из y, методу array.sort():

let nums =[26, 9, 8, 42];

nums.sort(function(x, y) {

return x — y;

});

// Результат - [8, 9, 26, 42]

Если разница между x и y имеет отрицательное значение, меньший элемент устанавливается в массиве слева от большего элемента. В результате массив формируется в порядке возрастания. В приведенном выше примере применена анонимная функция внутри sort(). С тем же успехом возможно создание именованной функции с последующим ее возвращением в sort().

Чтобы отсортировать числовой массив в обратном порядке, необходимо в теле функции изменить положение обоих операндов. Так массив будет выстроен по убыванию.

let nums =[26, 9, 8, 42];

nums.sort(function(x, y){

return y — x;

});

// Вид нового массива - [42, 26, 9, 8]

Как отсортировать элементы массива в рандомном порядке

Для формирования случайного порядка элементов находящихся в массиве необходимо возвращение функцией params значения также в случайном порядке, вне зависимости от результата вычитания операндов. Для этого функция лишается своих предыдущих параметров, а сама она проделывает следующую нехитрую магию:

var nums = [105, 61, 1000, 44, 92, 873];

nums.sort(() => {

return 0.5 — Math.random();

});

// Этим достигается рандомное расположение элементов в массиве

Упорядочить массив с элементами в виде объектов

Имеем массив, элементами которого являются объекты со свойствами:

let slaves = [
    {name: "Вася", age: 18, retiredate: "14 апреля 2020"},
    {name: "Коля", age: 23, retiredate: " 21 мая 2021"},
    {name: "Антонина", age: 19, retiredate: "10 октября 2027"},
    {name: "Венцеслав", age: 38, retiredate: "12 сентября, 2025"}
];

Применением sort() в отношении указанного массива, возможно добиться упорядочивания его элементов, а именно: сортировать по возрастным критериям либо по имени, или, как в рассматриваемом случае, по времени освобождения. Для реализации такого вида упорядочивания следует ввести в функцию алгоритм, посредством которого объекты сравниваются по своим значениям.

Отсортировать элементы массива по возрасту

Массив, состоящий из строковых элементов, упорядочивается стоково в алфавитном порядке. Сортировка объектов, являющихся элементами массива, применяется функцию сравнения, результатом действия которой будет формирование массива в порядке расположения букв алфавита.

slaves.sort(function(x, y) {

    let family1 = x.name.toLowerCase();
    let family2 = y.name.toLowerCase();
    if (family1 < family2) return -1;
    if (family1 > family2) return 1;

return 0;
});

В процессе выстраивания элементов в порядке возрастания, производится сравнение двух строк y.name и x.name, с возвращением 0, 1 или -1. Анонимная функция используется непосредственно самим методом sort(), и другой функции не передается.

Упорядочивание элементов массива по критериям возраста

Сформировать элементы массива по данному значению в прядке возрастания возможно, если использовать следующую функцию:

slaves.sort(function(x, y){

    return x.age - y.age;

})

Указанная функция производит сортировку по свойству возраст (age). Процедура практически аналогична упорядочиванию массива по его числам, с единственным отличием - вместо разницы операндов x и y, вычитается x.age из y.age.

Упорядочивание массива по дате

Третьим значением в нашем примере является дата освобождения воображаемых рабов (извините, за, возможно, некорректные формулировки). Прежде всего, необходимо сформировать объект даты из строчного элемента.

slaves.sort(function(x, y) {

    let time1 = new Date(x.retiredate);
    let time2 = new Date(y.retiredate);

    return time1 - time2;

});

В результате массив отсортирован по возрастающей величине даты. Код предоставляет возможность сравнения slaves[0] со slaves[1] и так далее и затем произвести вычисление даты, конвертируемой в вид числа.


Теги: javaScript Сортировка
Категория Программирование   |   0 комм.

Похожие статьи

Нет результатов.