Js Выборочная сортировка

1

Я пытаюсь сортировать массив строк ['d', 'CC', 'BB', 'b', 'a', 'Am','AMG'] в таком порядке ["AMG", "Am", "a", "BB", "b", "CC", "d"]

С помощью

arr.sort(function (a, b) {
  return a.toLowerCase().localeCompare(b.toLowerCase());
});

Я получаю ["a", "Am", "AMG", "b", "BB", "CC", "d"]

  • 0
    потому что, <am <amg <b <bb <cc <d - посмотрите в словаре ... запись для a идет перед записью для am
  • 0
    ваш заказ не имеет смысла
Показать ещё 3 комментария
Теги:
arrays
sorting

1 ответ

2
Лучший ответ

Вы можете связать некоторые критерии сортировки, заменив регистр букв, затем

  • сортировать по первым строчным символам по возрастанию,
  • сортировать по длине по убыванию
  • сортировать по строке по возрастанию

function swap(s) {
    return Array.from(s, c => c.toUpperCase() === c ? c.toLowerCase() : c.toUpperCase()).join('');
}

var array = ['d', 'CC', 'BB', 'b', 'bb', 'a', 'Am', 'AMG'];

array.sort((a, b) => {
    var aa = swap(a),
        bb = swap(b);

   return a[0].toLowerCase().localeCompare(b[0].toLowerCase())
       || bb.length - aa.length
       || aa.localeCompare(bb);
});

console.log(array); // ["AMG", "Am", "a", "BB", "b", "CC", "d"]
  • 0
    если иметь сортировку ['bb', 'BB'] не удается ["AMG", "Am", "a", "bb", "BB", "CC", "d"]
  • 0
    пожалуйста, смотрите редактировать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню