Как отсортировать массив объектов в javascript
Перейти к содержимому

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

  • автор:

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

важность: 5

Напишите функцию sortByAge(users) , которая принимает массив объектов со свойством age и сортирует их по нему.

let vasya = < name: "Вася", age: 25 >; let petya = < name: "Петя", age: 30 >; let masha = < name: "Маша", age: 28 >; let arr = [ vasya, petya, masha ]; sortByAge(arr); // теперь: [vasya, masha, petya] alert(arr[0].name); // Вася alert(arr[1].name); // Маша alert(arr[2].name); // Петя
function sortByAge(arr) < arr.sort((a, b) =>a.age > b.age ? 1 : -1); > let vasya = < name: "Вася", age: 25 >; let petya = < name: "Петя", age: 30 >; let masha = < name: "Маша", age: 28 >; let arr = [ vasya, petya, masha ]; sortByAge(arr); // теперь отсортировано: [vasya, masha, petya] alert(arr[0].name); // Вася alert(arr[1].name); // Маша alert(arr[2].name); // Петя

Как отсортировать массив объектов в 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; >

Как сделать сортировку массива объектов по ключу 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 и вывели ее в консоль.

Сортировка массива объектов по возрастанию

Понятия и не имею как был принят предыдщий ответ, но явно не работает и вот наглядное док-во:

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);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *