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

sort() Этот метод является одним из самых мощных методов массива.

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

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

Пример

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // Сортировка элементов в fruits

Попробуйте сами

Обратная сортировка массива

reverse() Метод обратной сортировки элементов в массиве.

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

Пример

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // Сортировка элементов в fruits
fruits.reverse();         // Обратная сортировка элементов

Попробуйте сами

Числовая сортировка

По умолчаниюsort() Функция сортируетСтрокипорядок сортировки значений.

Эта функция подходит для строк ("Apple" будет排在 "Banana" перед).

Однако, если числа сортируются как строки, то "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() Метод вызывает функцию сравнения function(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()}); 

Попробуйте сами

Найти максимальное (или минимальное) значение массива

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

После сортировки массива вы можете использовать индекс, чтобы получить максимальное или минимальное значение.

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

Пример

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)

Мои методы Min / Max на JavaScript

Самый быстрый способ решения - это использование «собственного» метода.

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

Пример (поиск 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:"Volvo", year:2016},
{type:"Saab", year:2001},
{type:"BMW", year:2010}];

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

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

Пример

cars.sort(function(a, b){возврат a.year - b.year});

Попробуйте сами

Сравнение свойств строки несколько сложнее:

Пример

cars.sort(function(a, b){
	  var x = a.type.toLowerCase();
	  var y = b.type.toLowerCase();
	  if (x < y) {возврат -1;}
	  if (x > y) {возврат 1;}
	  возврат 0;
});

Попробуйте сами