Сортировать элементы массива по алфавиту после числовой сортировки - PullRequest
0 голосов
/ 13 мая 2018

Предположим, у меня есть массив:

arr = ["Tom, 2, 6","Bill, 3, 8","Lisa, 4, 7","Charles, 2, 8"]

Я знаю, что могу использовать arr.split(',',2).pop();, например, для извлечения 2-х элементов в каждой строке и пользовательской функции сравнения для их сортировки. Тем не менее, как я могу отсортировать по алфавиту после числовой сортировки?

В этом случае, например, строки с Томом и Чарльзом в них, обе имеют 2 после первой запятой. Численная сортировка поставила бы Тома впереди Чарльза, но я бы хотел, чтобы они также появлялись в алфавитном порядке. Так как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Вы можете передать пользовательскую функцию обратного вызова в sort()

var arr = ["Tom, 2, 6", "Bill, 3, 8", "Lisa, 4, 7", "Charles, 2, 8"];

arr.sort((a, b) => {
  a = a.split(',').map(o => o.trim());     //Split a and trim
  b = b.split(',').map(o => o.trim());     //Split b and trim

  if (a[1] !== b[1]) return a[1] - b[1];   //Check if the second value is not the same, if not the same sort using the second value
  return a[0].localeCompare(b[0]);         //Since second value is the same, use the first value to sort
})

console.log(arr);

Использование фамилии (2-го слова) для сопоставления

var arr = ["Tom Peters, 2, 6", "Bill Burgess, 2, 8", "Lisa Cooper, 4, 7", "Charles White, 2, 8"];

arr.sort((a, b) => {
  a = a.split(',').map(o => o.trim()); //Split a and trim
  b = b.split(',').map(o => o.trim()); //Split b and trim

  if (a[1] !== b[1]) return a[1] - b[1]; //Check if the second value is not the same, if not the same sort using the second value
  return a[0].split(' ')[1].localeCompare(b[0].split(' ')[1]); //Since second value is the same, use the first value to sort
})

console.log(arr);

Документ: сортировка ()

0 голосов
/ 13 мая 2018

Почему бы вам не попробовать сортировку после?

arr.sort();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...