Как отсортировать массив объектов в javascript
Мы хотим сделать этот проект с открытым исходным кодом доступным для людей во всем мире. Пожалуйста, помогите нам перевести это руководство на другие языки.
Светлая тема Тёмная тема
Поделиться
- Учебник
- Язык JavaScript
- Продвинутая работа с функциями
- Область видимости переменных, замыкание
Сортировать по полю
важность: 5
У нас есть массив объектов, который нужно отсортировать:
let users = [ < name: "John", age: 20, surname: "Johnson" >, < name: "Pete", age: 18, surname: "Peterson" >, < name: "Ann", age: 19, surname: "Hathaway" >];
Обычный способ был бы таким:
// по имени (Ann, John, Pete) users.sort((a, b) => a.name > b.name ? 1 : -1); // по возрасту (Pete, Ann, John) users.sort((a, b) => a.age > b.age ? 1 : -1);
Можем ли мы сделать его короче, например вот таким?
users.sort(byField('name')); users.sort(byField('age'));
То есть чтобы вместо функции мы просто писали byField(fieldName) .
Напишите функцию byField , которая может быть использована для этого.
function byField(fieldName) < return (a, b) =>a[fieldName] > b[fieldName] ? 1 : -1; >
Сортировка массива объектов по возрастанию
Понятия и не имею как был принят предыдщий ответ, но явно не работает и вот наглядное док-во:
let data = [< "price": "1000" >, < "price": "100" >, < "price": "500" >]; data.sort((a, b) => a > b ? 1 : -1); console.log(data);
- Во первых, как можно увидеть он просто выводит в том же порядке что и записано в массив
- Во вторых возвращать -1 , когда элементы равны нельзя. В этом вопросе обсуждалось это
А вот то что вам нужно было на самом деле:
const data = [< "price": "1000" >, < "price": "100" >, < "price": "500" >]; data.sort((a, b) => (+a.price) - (+b.price)); console.log(data); // Ну или можно записать явное преобразование в число, если читать плюсики не очень удобно data.sort((a, b) => Number(a.price) - Number(b.price)); console.log(data);
Сортировка массива объектов по алфавиту в JavaScript
Работа с массивами является важной частью программирования на JavaScript. Одна из распространенных задач — сортировка массива объектов по одному из свойств объекта.
Представим простой пример: есть массив объектов, где каждый объект представляет собой пользователя с именем и другими данными. Например:
var users = [ < name: 'Bob', email: 'bob@example.com', >, < name: 'Alice', email: 'alice@example.com', >, < name: 'Charlie', email: 'charlie@example.com', >];
В данном случае, цель — отсортировать этот массив по именам пользователей в алфавитном порядке.
В JavaScript есть встроенный метод массива под названием sort() , который может быть использован для сортировки элементов массива. Однако, стандартное поведение sort() может не подходить для сортировки объектов, поскольку он сортирует элементы как строки.
Чтобы сортировать массив объектов по определенному свойству, нужно предоставить свою функцию сравнения в качестве аргумента для sort() . Функция сравнения принимает два аргумента и возвращает число, которое определяет, какой из двух аргументов идет первым.
Вот пример функции сравнения, которая сортирует объекты по свойству name в алфавитном порядке:
users.sort(function(a, b) < if (a.name < b.name) < return -1; >if (a.name > b.name) < return 1; >// если имена равны return 0; >);
Эта функция сравнения говорит методу sort() , что если name первого объекта меньше name второго, то первый объект должен идти раньше. Если name первого объекта больше, то он должен идти позже. Если имена равны, порядок объектов не важен.
После выполнения этого кода, массив users будет отсортирован по именам пользователей в алфавитном порядке.
Как сделать сортировку массива объектов по ключу js
Чтобы сделать сортировку объектов по ключу, можно воспользоваться тем же методом, как и при обычной сортировке, используя метод sort . Только теперь нужно сравнивать значения в объектах по ключу:
const users = [ name: 'Name2', age: 23, >, name: 'Name3', age: 34, >, name: 'Name1', age: 12, >, ]; const key = 'age'; // ключ, по которому будем сортировать const sorted = users.sort((user1, user2) => user1[key] > user2[key] ? 1 : -1); console.log(sorted); // проверяем результат
05 апреля 2023
Для сортировки массива объектов по ключу с использованием библиотеки Lodash :
const _ = require('lodash'); const cars = [ make: 'Toyota', model: 'Camry', year: 2018 >, make: 'Honda', model: 'Accord', year: 2019 >, make: 'Tesla', model: 'Model S', year: 2020 >, make: 'Ford', model: 'Mustang', year: 2017 >, ]; const sortedCars = _.sortBy(cars, ['year']); console.log(sortedCars);
В этом примере мы создали массив объектов cars , содержащий информацию о машинах, а затем отсортировали его по ключу year с помощью метода _.sortBy() . Результат сортировки мы записали в переменную sortedCars и вывели ее в консоль.