Метод 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 ❤️ Поддержите мою работу