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

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

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

Пример

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

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

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

Пример

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

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

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

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

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

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

Пример

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

Пример

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

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

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

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

Пример:

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

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

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

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

Сортировать по алфавиту
Сортировать по числам

Как отсортировать массив однотипных javascript-объектов по значению одного из их свойств. Решения для числовых, а так же для строковых типов данных.

Как отсортировать массив однотипных объектов по значению одного из их свойств.

Для примера возьмём массив пользователей, где у пользователей есть id, имя и возраст:

Для сортировки массивов используем метод sort() .

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

Собственно в нашем примере массива мы должны в калбеке работать со свойством age:

Как видно всё очень просто.

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

Сортируем массив пользователей по имени — готовое решение:

Как видно, в результате объекты в массиве отсортированы по именам пользователей.

*** Авторизируйтесь чтобы писать комментарии.

Если вам нужно рассортировать массив объектов в определенном порядке, возможно, вы почувствуете искушение применить библиотеку JavaScript. Прежде чем приняться за это дело, помните, существует встроенная функция сортировки Array.sort. В этой статья я расскажу вам, как сортировать массив объектов без особой суеты.

Базовая сортировка массива

По умолчанию, функция Array.sort в JavaScript конвертирует каждый элемент в массиве в строку, а затем сравнивает их в порядке Unicode code point.

Немного странно, почему 30 идет перед 4. не логично, да? На самом деле все логично. Это происходит по причине того, что каждый элемент в массиве сначало конвертируется в строку, и «30» находится перед «4» в порядке Unicode.

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

Чтобы предотвратить это, вы можете создать новый массив для сортировки и модифицировать его.

Просто использовать Array.sort может быть не так эффективно для сортировки массива объектов, но к счастью функция принимает параметр compareFunction, который позволяет сортировать массив элементов согласно возвращаемому значению функции сравнения.

Используем функцию сравнения для сортировки

Допустим a и b — два элемента сравниваемых в функции. Если возвращаемое значение будет:

1 меньше 0 — a идет перед b

2 больше 0 — b идет перед a

3 равно 0 — a и b не изменяются

Рассмотрим простой пример:

Код можно рефакторить для получения возвращаемого значения, извлекая a из b

Теперь можно создать стрелочную функцию:

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

А теперь перейдем к сортировке массива объектов. Возьмем следующий пример:

Мы используем функцию сравнения для сортировки массива согласно жанру:

Чтобы поменять порядок, мы можем инвертировать возвращаемое значение:

Создаем динамическую функцию сортировки

Закончим на более динамичном примере. Создадим функцию, с помощью которой можно сортировать массив объектов, чьи значения не являются строками или числами. Функция имеет два параметра — ключ, которым мы сортируем и порядок получаемого результата (ascending или descending).

Вот как мы это используем:

Выше мы используем метод hasOwnProperty чтобы проверить, установлено ли указанное свойство в каждом объекте и не было ли оно унаследовано через прототип цепи. Если он не указан в объекте, функция вернет 0, что оставляет порядок сортировки как есть (объекты остаются неизменными).

Typeof operator также используется для проверки типа даты данного значения. Это позволяет нам определить правильный способ сортировки массива. К примеру, если значение указанного свойства является строкой, метод toUpperCase используется для конвертирования всех символов в верхний регистр, поэтому происходит игнорирование регистра при сортировки.

Оцените статью
SoftLast
Добавить комментарий