Теперь, когда мы рассмотрели нахождение min/max из массива массивов, давайте посмотрим, как мы можем пойти дальше и отсортировать все элементы на основе значения подмассива.
Чтобы обрисовать проблему, предположим, что у нас есть следующий массив пользователей.
const users = [
['Nicole', 31],
['Chris', 33],
['Sanne', 1],
['Yaatree', 2],
];
Массив пользователей содержит подмассивы, представляющие имя пользователя и его возраст.
Как теперь отсортировать этот массив по возрасту пользователя?
Сортировка массива по значению подмассива
Мы можем использовать собственный метод sort
для достижения нашей цели — сортировки этого массива.
В своей самой простой форме вы можете вызвать if для массива, и он попытается отсортировать их на основе содержимого.
То есть, если массив содержит строки, он будет сортировать их в алфавитном порядке.
Это будет выглядеть следующим образом:
console.log(['b', 'c', 'a'].sort());
// [ 'a', 'b', 'c' ]
Однако в нашем случае все немного сложнее, поскольку у нас есть массив массивов.
Вызов sort будет использовать первый элемент массива в качестве метода сортировки, поэтому в итоге мы отсортируем по имени.
console.log(users.sort());
// Returns:
// [
// [ 'Chris', 33 ],
// [ 'Nicole', 31 ],
// [ 'Sanne', 1 ],
// [ 'Yaatree', 2 ]
// ]
Это отличный вариант, если мы хотим отсортировать по имени, но при этом хотим отсортировать по значению возраста.
Здесь в дело вступают дополнительные возможности метода sort.
Он может принимать аргументы, которые мы можем использовать для улучшения сортировки.
users.sort((a, b) => {
// Do something with a and b
});
Приведенный выше пример кода — это синтаксис, который мы можем использовать.
Он принимает первый и второй элементы для сравнения.
Поскольку мы сортируем по числам, они даже дают нам возможность быстро отсортировать их.
users.sort((a, b) => {
return a[1] - b[1];
});
// Returns:
// [
// [ 'Sanne', 1 ],
// [ 'Yaatree', 2 ],
// [ 'Nicole', 31 ],
// [ 'Chris', 33 ]
// ]
Мы также можем изменить порядок, поменяв местами сравнение a и b.
users.sort((a, b) => {
return b[1] - a[1];
});
// Returns:
// [
// [ 'Chris', 33 ],
// [ 'Nicole', 31 ],
// [ 'Yaatree', 2 ],
// [ 'Sanne', 1 ]
// ]
И в довершение всего, мы можем записать это как функции sort hand, чтобы сделать все очень чисто.
users.sort((a, b) => a[1] - b[1]));
Вот и все. Мы узнали, как сортировать массив на основе значения подмассива.
Спасибо, что прочитали, и давайте общаться!
Спасибо, что читаете мой блог. Не стесняйтесь подписываться на мою рассылку по электронной почте и подключайтесь на Facebook или Twitter.