@FrontDev92

Как правильно отсортировать массив объектов?

Есть массив:

cities = [
    {city: "Артёмовск", population: 1688},
    {city: "Ачинск", population: 105259},
    {city: "Боготол", population: 19819},
    {city: "Бородино", population: 16061},
    {city: "Дивногорск", population: 29195},
    {city: "Дудинка", population: 21015},
    {city: "Енисейск", population: 17805},
    {city: "Железногорск", population: 83857},
    {city: "Заозёрный", population: 10286},
    {city: "Красноярск", population: 1095286}
    ];

Нужно отсортировать его по алфавиту, но на первое место поставить город с наибольшим значением численности населения.

Пробую так:

function sortData(arr) {
        const max = arr.reduce((prev,cur) => +cur.population > +prev.population ? cur: prev);  //нахожу город с максимальным населением
        const maxIndex = arr.findIndex(item => item.city === max.city); //нахожу индекс этого объекта в массиве
        arr.splice(maxIndex, 1);  // вырезаю его
        arr = arr.sort((a, b) => a.city.toLowerCase() - b.city.toLowerCase());  // провожу сортировку по алфавиту
        arr.unshift(max);  // вставляю в начало город с максимальным населением
        return arr;
    }

Функция работает, но мне кажется, что я что-то упускаю...
Можно ли город с максимальным населением поднять вверх как-то попроще (возможно, на этапе сортировки) и обойти нахождение максимального элемента, его вырезание и вставку?
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function sort([...arr]) {
  const max = arr.reduce((max, n) => max?.population > n.population ? max : n, null);
  return arr.sort((a, b) => a === max ? -1 : b === max ? 1 : a.city.localeCompare(b.city));
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
25 апр. 2024, в 12:03
75000 руб./за проект
25 апр. 2024, в 11:49
25000 руб./за проект
25 апр. 2024, в 11:37
40000 руб./за проект