Как отсортировать массив по нескольким значениям?

В JavaScript есть несколько способов отсортировать массив по нескольким значениям. Некоторые из них встроены в язык, в то время как другие требуют некоторой дополнительной работы.

1. Использование метода sort() и функции сравнения:
Самым простым способом является использование встроенного метода sort() вместе с функцией сравнения. Функция сравнения должна принимать два аргумента и возвращать отрицательное число, если первый аргумент должен быть расположен перед вторым в отсортированном массиве, положительное число, если второй аргумент должен быть расположен перед первым, и 0, если их порядок не имеет значения. Например:

   const arr = [
     { name: "John", age: 25 },
     { name: "Alice", age: 30 },
     { name: "Bob", age: 20 }
   ];

   arr.sort((a, b) => {
     if (a.name < b.name) return -1;
     if (a.name > b.name) return 1;
     if (a.age < b.age) return -1;
     if (a.age > b.age) return 1;
     return 0;
   });

   console.log(arr);

В этом примере мы сортируем массив объектов по полю name и затем по полю age.

2. Использование метода sort() и цепочки вызовов методов:
Вместо функции сравнения можно использовать цепочку вызовов методов для определения порядка сортировки. Например:

   const arr = [
     { name: "John", age: 25 },
     { name: "Alice", age: 30 },
     { name: "Bob", age: 20 }
   ];

   arr.sort((a, b) => a.name.localeCompare(b.name)).sort((a, b) => a.age - b.age);

   console.log(arr);

В этом примере мы сначала сортируем массив по полю name с использованием метода localeCompare(), а затем сортируем его по полю age с помощью операции вычитания.

3. Использование внешней библиотеки:
Если вам нужна более сложная логика сортировки или вы хотите сортировать большие массивы с высокой производительностью, вы можете использовать специальные библиотеки, такие как Lodash или Underscore, которые предоставляют богатый набор функций для работы с массивами, включая сортировку по нескольким значениям.

Пример с использованием библиотеки Lodash:

   const _ = require("lodash");

   const arr = [
     { name: "John", age: 25 },
     { name: "Alice", age: 30 },
     { name: "Bob", age: 20 }
   ];

   const sortedArr = _.sortBy(arr, ["name", "age"]);

   console.log(sortedArr);

В этом примере мы используем функцию sortBy() из библиотеки Lodash для сортировки массива по полю name и age.

Надеюсь, эти примеры помогут вам понять, как отсортировать массив по нескольким значениям в JavaScript.