Учебник по JS

ГЛАВНАЯ JS Введение JS Куда Вывод JS Заявления JS JS-синтаксис JS-комментарии JS-переменные JS Пусть Константа JS JS-операторы JS-арифметика Назначение JS JS-типы данных JS-функции JS-объекты JS-события JS-строки Строковые методы JS Поиск строки JS Шаблоны строк JS JS-номера Методы номеров JS JS-массивы Методы массива JS Сортировка массива JS Итерация массива JS Константа массива JS JS-даты Форматы даты JS Методы получения даты JS Методы установки даты JS JS-математика JS Случайный JS Булевы значения Сравнение JS JS-условия JS-переключатель JS цикл для Цикл JS для входа Цикл JS для Цикл JS во время Перерыв JS JS-итерации JS-наборы JS-карты JS Typeof Преобразование типов JS JS побитовый JS регулярное выражение JS-ошибки Область JS JS-подъем Строгий режим JS JS это ключевое слово Функция стрелки JS JS-классы JS JSON JS-отладка Руководство по стилю JS Лучшие практики JS JS-ошибки JS-производительность Зарезервированные слова JS

JS-версии

JS-версии JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE/пограничный История JS

JS-объекты

Определения объектов Свойства объекта Методы объекта Отображение объекта Средства доступа к объектам Конструкторы объектов Прототипы объектов Итерации объектов Наборы объектов Карты объектов Ссылка на объект

JS-функции

Определения функций Параметры функции Вызов функции Вызов функции Функция Применить Закрытие функций

JS-классы

Введение в класс Наследование классов Статический класс

JS асинхронный

Обратные вызовы JS JS асинхронный JS-обещания JS асинхронный/ожидание

JS HTML DOM

Дом Введение DOM-методы Документ DOM DOM-элементы DOM HTML DOM-формы ДОМ CSS DOM-анимации События ДОМ Слушатель событий DOM DOM-навигация DOM-узлы Коллекции DOM Списки узлов DOM

Спецификация браузера JS

JS-окно JS-экран Местоположение JS История JS JS-навигатор Всплывающее оповещение JS JS Тайминг JS-куки

JS-веб-API

Введение в веб-API API веб-форм API истории веб-поиска API веб-хранилища API веб-работника API веб-выборки API веб-геолокации

JS АЯКС

Введение в АЯКС AJAX XMLHttp АЯКС-запрос AJAX-ответ XML-файл AJAX АЯКС PHP АЯКС АСП База данных AJAX AJAX-приложения Примеры AJAX

JS JSON

Введение в JSON Синтаксис JSON JSON против XML Типы данных JSON Анализ JSON Строковая JSON JSON-объекты JSON-массивы JSON-сервер JSON PHP JSON HTML JSON JSONP

JS против JQuery

Селекторы jQuery JQuery HTML jQuery CSS JQuery DOM

JS-графика

JS-графика JS Холст JS сюжет JS Chart.js JS Google Диаграмма JS D3.js

JS-примеры

JS-примеры JS HTML DOM JS HTML-ввод HTML-объекты JS HTML-события JS JS-браузер JS-редактор JS-упражнения JS-викторина JS-сертификат

JS-ссылки

Объекты JavaScript HTML DOM-объекты


Массивы сортировки JavaScript


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

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

Пример

const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();

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

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

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

Пример

const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();

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

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

Это хорошо работает для строк ("Apple" предшествует "Banana").

Однако, если числа отсортированы как строки, «25» больше, чем «100», потому что «2» больше, чем «1».

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

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

Пример

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

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

Пример

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


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

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

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

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

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

Если результат отрицательный a, сортируется до b.

Если результат положительный b, сортируется раньше a.

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

Пример:

Функция сравнения сравнивает все значения в массиве, по два значения за раз (a, b).

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

Функция вычисляет 40 - 100 (a - b), и, поскольку результат отрицательный (-60), функция сортировки отсортирует 40 как значение меньше 100.

Вы можете использовать этот фрагмент кода, чтобы поэкспериментировать с числовой и алфавитной сортировкой:

<button onclick="myFunction1()">Sort Alphabetically</button>
<button onclick="myFunction2()">Sort Numerically</button>

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

<script>
const 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>

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

Пример

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


Метод Фишера Йейтса

Приведенный выше пример, массив .sort(), не точен, он будет отдавать предпочтение одним числам над другими.

Самый популярный правильный метод называется перетасовкой Фишера-Йейтса и был введен в науку о данных еще в 1938 году!

В JavaScript метод можно перевести так:

Пример

const points = [40, 100, 1, 5, 25, 10];

for (let i = points.length -1; i > 0; i--) {
  let j = Math.floor(Math.random() * i)
  let k = points[i]
  points[i] = points[j]
  points[j] = k
}


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

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

Однако после сортировки массива можно использовать индекс для получения наибольшего и наименьшего значений.

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

Пример

const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// now points[0] contains the lowest value
// and points[points.length-1] contains the highest value

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

Пример

const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
// now points[0] contains the highest value
// and points[points.length-1] contains the lowest value

Сортировка всего массива — очень неэффективный метод, если вы хотите найти только самое высокое (или самое низкое) значение.


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

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

Пример

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

Math.max.apply(null, [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(null, [1, 2, 3])эквивалентно Math.min(1, 2, 3).


Мои минимальные/максимальные методы JavaScript

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

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

Пример (найти макс.)

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

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

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

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


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

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

Пример

const cars = [
  {type:"Volvo", year:2016},
  {type:"Saab", year:2001},
  {type:"BMW", year:2010}
];

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

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

Пример

cars.sort(function(a, b){return a.year - b.year});

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

Пример

cars.sort(function(a, b){
  let x = a.type.toLowerCase();
  let y = b.type.toLowerCase();
  if (x < y) {return -1;}
  if (x > y) {return 1;}
  return 0;
});

Полный справочник массивов

Полную справку по массивам см. на странице:

Полный справочник по массивам JavaScript .

Справочник содержит описания и примеры всех свойств и методов массива.

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

Упражнение:

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

const fruits = ["Banana", "Orange", "Apple", "Kiwi"];
;