Метод sort() в массиве объектов
function sortByAge(arr) {
arr.sort((a, b) => a.age - b.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); // Петя
Вот пример кода, как работает параметры a и b в методе sort. Конкретнее, например, почему 'a.age' берет сначало именно vasya, а 'b' берет petya. Тоесть почему такой порядок, как потом 'a' берет 'masha', и так далее. Надеюсь объяснил
Ответы (2 шт):
Метод sort использует сортировку, основанную на сравнениях. Скорее всего, это быстрая сортировка (quicksort), но для данного случая можно рассматривать и любую другую попроще - например, вставками или пузырьком.
Внутри сортировки происходит сравнение пар элементов и элементы упорядочиваются соответственно результату сравнения.
Для того, чтобы обобщённый метод сортировки мог работать с любыми данными, программист может передать методу функцию сравнения, которая в данном случае обеспечивает сравнение по полю возраста. Для каких именно пар будет реально проведено сравнение - зависит от внутренностей метода сортировки, и это обычно не все возможные пары.
Чтобы посмотреть, какие именно сравнения происходят внутри функции сортировки, можно просто вывести это в консоль:
let step = 1
function sortByAge(arr) {
arr.sort((a, b) => {
console.log(`Сравнение № ${step++}: ${a.name} (a) c ${b.name} (b)`)
return a.age - b.age
});
}
let vasya = {name: "Вася", age: 25};
let petya = {name: "Петя", age: 30};
let masha = {name: "Маша", age: 28};
let arr = [vasya, petya, masha];
sortByAge(arr);
console.log(arr)
В данном случае сравнение выполняется 4 раза, причем Маша с Петей сравниваются дважды.