JavaScript сортировка массива на основе значения подмассива

Теперь, когда мы рассмотрели нахождение 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.

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