САЙТ ДЛЯ ВЕБ РАЗРАБОТЧИКОВ НА РУССКОМ ЯЗЫКЕ

JavaScript Сортировка массива



Сортировка массива

Метод sort() сортирует массив по алфавиту:

Пример

var fruits = ["Банан", "Апельсин", "Яблоко", "Манго"];
fruits.sort();        // Сортировка элементов фруктов
Редактор кода »

Реверсирование массива

Метод reverse() отменяет элементы в массиве.

Его можно использовать для сортировки массива по убыванию:

Пример

var fruits = ["Банан", "Апельсин", "Яблоко", "Манго"];
fruits.sort();        // Сначала отсортируем элементы фруктов
fruits.reverse();     // Затем изменим порядок элементов
Редактор кода »

Сортировка чисел

По умолчанию функция sort() сортирует значения строк.

Очень хорошо работает для строк ("Яблоко" раньше будет "Банан").

Однако, если числа сортируются как строки, то 25 это больше, чем 100, потому что 2это больше, чем 1.

Поэтому метод sort() при сортировке выдаст неверный результат чисел.

Вы можете исправить, предоставив функцию сравнения:

Пример

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
Редактор кода »

Используйте тот же трюк, чтобы отсортировать массив по убыванию:

Пример

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
Редактор кода »

Функция сравнения

Функция сравнения предназначена для определения альтернативного порядка сортировки.

Функция сравнения должна возвращать отрицательное, нулевое или положительное значение, в зависимости от аргумента:

function(a, b){return a-b}

Когда функция sort() сравнивает два значения, она отправляет значения сравнить функцию и сортирует значения по возврату (минус, нулевое, положительное) значение.

Пример:

При сравнении 40 и 100 метод sort() вызывает функцию сравнения (40,100).

Функция вычисляет 40-100, и возвращает -60 (отрицательное значение).

Функция сортировки сортирует 40 как значение ниже 100.

Этот фрагмент кода можно использовать для сортировки чисел и сортировки по алфавиту:

<button onclick="myFunction1()">Сортировать по алфавиту</button>
<button onclick="myFunction2()">Сортировать по числам</button>

<p id="demo"></p>

<script>
var points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points;

function myFunction1() {
    points.sort();
    document.getElementById("demo").innerHTML = points;
}
function myFunction2() {
    points.sort(function(a, b){return a - b});
    document.getElementById("demo").innerHTML = points;
}
</script>
Редактор кода »

Сортировка массива в случайном порядке

Пример

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return 0.5 - Math.random()});

Редактор кода »


Найти наибольшее или наименьшее значение массива

Нет встроенных функций для нахождения максимального и минимального значение в массиве.

Однако, у вас есть отсортированный массив, вы можете использовать индекс для получения самых высоких и самых низких значений.

Сортировка по возрастанию:

Пример

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// теперь points[0] содержит наименьшее значение
// и points[points.length-1] содержит наибольшее значение
Редактор кода »

Сортировка по убыванию:

Пример

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
// теперь points[0] содержит наибольшее значение
// и points[points.length-1] содержит наименьшее значение
Редактор кода »

Сортировка всего массива является очень неэффективным методом, если требуется найти только наибольшее или наименьшее значение.


Использовать Math.max() в массиве

Вы можете использовать Math.max.apply, чтобы найти наибольшее число в массиве:

Пример

function myArrayMax(arr) {
    return Math.max.apply(null, arr);
}

Редактор кода »

Math.max.apply([1, 2, 3]) эквивалентно Math.max(1, 2, 3).


Использовать Math.min() в массиве

Вы можете использовать Math.min.apply для поиска наименьшего числа в массиве:

Пример

function myArrayMin(arr) {
    return Math.min.apply(null, arr);
}

Редактор кода »

Math.min.apply([1, 2, 3]) эквивалентно Math.min(1, 2, 3).


JavaScript методы Min / Max

Самым быстрым решением является использование "домашний" метод.

Эта функция выполняет цикл через массив, сравнивая каждое значение с наибольшим найденным значением:

Пример (найти Max)

function myArrayMax(arr) {
    var len = arr.length
    var max = -Infinity;
    while (len--) {
        if (arr[len] > max) {
            max = arr[len];
        }
    }
    return max;
}

Редактор кода »

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

Пример (Найти Min)

function myArrayMin(arr) {
    var len = arr.length
    var min = Infinity;
    while (len--) {
        if (arr[len] < min) {
            min = arr[len];
        }
    }
    return min;
}

Редактор кода »


Сортировка объектов массива

JavaScript массивы часто содержат объекты:

Пример

var cars = [
{type:"Вольво", year:2016},
{type:"Сааб", year:2001},
{type:"БМВ", year:2010}];

Даже если объекты имеют свойства различных типов данных, метода sort() может использоваться для сортировки массива.

Решение состоит в том, чтобы написать функцию сравнение для сравнения значений свойств:

Пример

cars.sort(function(a, b){return a.year - b.year});
Редактор кода »

Сравнение строковых свойств немного сложнее:

Пример

 cars.sort(function(a, b){
    var x = a.type.toLowerCase();
    var y = b.type.toLowerCase();
    if (x < y) {return -1;}
    if (x > y) {return 1;}
    return 0;
});
Редактор кода »

Проверьте себя с помощью упражнений!

Упражнение:

Используйте правильный метод Array для сортировки массива fruits в алфавитном порядке.

var fruits = ["Банан", "Апельсин", "Яблоко", "Киви"];
;

Начните упражнения