Сортировать массив объектов по свойствам
Задание: Напишите функции сортировки sortByName и sortByHeight, которые смогут отсортировать массив по именам (в алфавитном порядке) или росту (по убыванию роста). Вызовите только функцию сортировки по росту.
Нужна помощь по созданию этих функции. Я написал вот такой код, но это не работает:
// Это наш массив с объектами
let humans = [];
humans[0] = new Human("Коля", 23, 180);
humans[1] = new Human("Даша", 19, 170);
humans[2] = new Human("Ваня", 18, 192);
humans[3] = new Human("Петя", 45, 178);
humans[4] = new Human("Вася", 34, 197);
humans[5] = new Human("Джони", 40, 168);
humans[6] = new Human("Катя", 37, 160);
humans[7] = new Human("Петя", 29, 200);
humans[8] = new Human("Соня", 21, 172);
humans[9] = new Human("Женя", 25, 175);
class Human {
constructor(name, age, height) {
this.name = name;
this.age = age;
this.height = height;
}
getInfo() {
return `${this.name}, ${this.age}, ${this.height}`;
}
get firstName() {
return this.name;
}
get getAge() {
return this.age;
}
}
/////////////////////sorting functions/////////////////////
function sortByName() {
return console.log(humans.name.sort());
}
function sortByHeight() {
return console.log(humans.height.sort(sortByNumber));
}
function sortByNumber(a, b) { return a - b; }
sortByHeight();
Ответы (1 шт):
Во-первых, в выражении humans.height идёт обращение к несуществующему полю массива, если хотите обратиться к полю объекта внутри этого массива, то надо указать соответствующий индекс, например, humans[0].height.
Во-вторых, в функции сортировки надо указать конкретное поле объекта, по которому будет выполняться сортировка - a.name, a.height, а не объекта в целом, как указано в Вашем примере - function sortByNumber(a, b) { return a - b; }.
Ниже представлен рабочий вариант функций сортировки по росту и имени.
class Human {
constructor(name, age, height) {
this.name = name;
this.age = age;
this.height = height;
}
getInfo() {
return `${this.name}, ${this.age}, ${this.height}`;
}
get firstName() {
return this.name;
}
get getAge() {
return this.age;
}
}
// Это наш массив с объектами
let humans = [];
humans[0] = new Human("Коля", 23, 180);
humans[1] = new Human("Даша", 19, 170);
humans[2] = new Human("Ваня", 18, 192);
humans[3] = new Human("Петя", 45, 178);
humans[4] = new Human("Вася", 34, 197);
humans[5] = new Human("Джони", 40, 168);
humans[6] = new Human("Катя", 37, 160);
humans[7] = new Human("Петя", 29, 200);
humans[8] = new Human("Соня", 21, 172);
humans[9] = new Human("Женя", 25, 175);
/////////////////////sorting functions/////////////////////
function sortByName() {
return console.log(humans.sort(sortByString));
}
function sortByHeight() {
return console.log(humans.sort(sortByNumber));
}
function sortByNumber(a, b) { return b.height - a.height; }
function sortByString(a, b) { return a.name.localeCompare(b.name); }
sortByName();
sortByHeight();