Как отсортировать массив массивов с помощью Javascript?

Метод sort() позволяет сортировать элементы любого массива, возвращая отсортированный массив, но при этом изменяя положение исходных элементов массива.

В своей самой простой форме sort попытается отсортировать элементы на основе их содержимого, т.е. если массив содержит строки, он будет отсортирован по алфавиту.

Метод sort приводит элементы массива в строки и сравнивает их друг с другом для определения порядка.

let numbers = [0, 1 , 2, 3, 10, 20, 30 ];
numbers.sort();
console.log(numbers);
// [0,1, 10, 2, 20, 3, 30]

Войдите в полноэкранный режим Выход из полноэкранного режима

В данном случае метод sort ошибочно сортирует число 10 перед числом 2, потому что строка "10" идет перед строкой "2" при сравнении строк.

Но метод sort может также принимать аргумент, который позволяет определить, как будет выполняться сортировка.

Более подробную информацию о методе sort можно найти в документации на MDN.

Именно этот аргумент позволит вам отсортировать двумерный массив, как показано ниже:

const data = [
  ['Matias', 5, "07/24/2022"],
  ['Nicole', 7, "07/14/2022"],
  ['Inti', 10, "07/20/2022"],
  ['Mía', 3, "07/22/2022"],
 ]
Войдите в полноэкранный режим Выход из полноэкранного режима

Массив массивов или двумерный массив, где каждый подмассив содержит строку, число и дату в строковом формате.

Как можно отсортировать этот массив по дате 3-го элемента подмассива?

На самом деле это просто использование метода sort вместе с его аргументом: «функцией компаратора».

В случае с массивом data прямой вызов sort отсортирует его по первому элементу внутреннего массива.

console.log(data.sort())
/*
[
  ['Inti', 10, "07/20/2022"],
  ['Matias', 5, "07/24/2022"],
  ['Mía', 3, "07/22/2022"],
  ['Nicole', 7, "07/14/2022"],
]
*/
Войдите в полноэкранный режим Выход из полноэкранного режима

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


data.sort((a, b) => {

   // realizar alguna comparación

   // retornar 0 si ambos valores son iguales

   // retornar -1 si a va primero que b

   // retornar 1 si b va primero que a

})

Войдите в полноэкранный режим Выход из полноэкранного режима

Итак, в данном примере вы хотите отсортировать массив data на основе третьего элемента подмассива, а именно индекса 2, поэтому функция сравнения будет использовать этот индекс для выполнения сравнения.

data.sort((a, b) => {
  const dateA = new Date(a[2])
  const dateB = new Date(b[2])

  return dateA - dateB
})

/*[
  ['Nicole', 7, "07/14/2022"],
  ['Mía', 3, "07/22/2022"],
  ['Inti', 10, "07/20/2022"],
  ['Matias', 5, "07/24/2022"],
]
*/
Войдите в полноэкранный режим Выход из полноэкранного режима

Вот и все :D, для сортировки двумерного массива необходимо использовать индекс подмассива для функции сравнения.

В качестве дополнительного совета, чтобы сравнить даты, просто вычтите обе даты 🔥.


✉️ Присоединяйтесь к Micro-bytes 🐦 Следите за мной в Twitter ❤️ Поддержите мою работу

Оцените статью
devanswers.ru
Добавить комментарий