Сортировать строку в алфавитном порядке независимо от заглавных букв - JavaScript - PullRequest
1 голос
/ 07 июня 2019

Работает над этим вызовом кодовых войн .

Переупорядочить символы строки, чтобы они объединялись в новую строку в "регистр-алфавитно-нечувствительныйпорядок появления "порядок.Пробелы и знаки препинания должны быть просто удалены!

Ввод допускается не содержать цифр и только слов, содержащих буквы английского алфавита.

Пример:

в алфавитном порядке ("СвятойБиблия ") //" BbeehHilloTy "

Я начал с:

function alphabetized(s) {
    s = s.replace(/\s/g, "").toLowerCase();
    return s.split("").sort().join("");
}

console.log(alphabetized("The Holy Bible"));

Но, конечно, мы хотим вернуть BbeehHilloTy, сохраняя заглавные буквы оригинальных символов.

Честно говоря, я не понимаю, почему желаемый результат долженбыть BbeehHilloTy.

Если мы не сортируем по значениям кодов символов ASCII, то что определяет, должна ли заглавная буква отображаться перед строчной буквой в новой строке?

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Вот метод, который создает устойчивую сортировку путем сравнения индексов символов в строке, если они равны:

function alphabetized(s){
  s = s.replace(/\s+|\W+|\d+|[_]+/g, "");
  return s.split('')
    .map(function(x, i){ return [x, i]; })
    .sort(function([a, i], [b, j]){
      a = a.toLowerCase();
      b = b.toLowerCase();
      if (a == b)
        return i - j;
      else if (a < b)
        return -1;
      else
        return 1;
      })
      .map(function([x, i]){ return x; })
      .join('');
}

console.log(alphabetized("The Holy Bible"));
0 голосов
/ 07 июня 2019

Согласно коду @ user3483203:

function alphabetized(s) {
    s = s.replace(/\s+|\W+|\d+|[_]+/g, "");
    return s.split("").sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())).join("");
}

console.log(alphabetized("The Holy Bible"));

Таким образом, ключ должен использовать localCompare () здесь.

РЕДАКТИРОВАТЬ : На самом деле это решение нене работает для всех тестов на Codewars.

...