Сравнение 2 строк в алфавитном порядке для сортировки
Я пытаюсь сравнить 2 строки в алфавитном порядке для сортировки. Например, я хочу иметь булеву проверку как if('aaaa' < 'ab')
, Я попробовал это, но это не дает мне правильных результатов, поэтому я думаю, что это не правильный синтаксис. Как мне сделать это в JQuery или Javascript?
4 ответа
Давайте посмотрим на некоторые тестовые примеры - попробуйте запустить следующие выражения в консоли JS:
"a" < "b"
"aa" < "ab"
"aaa" < "aab"
Все возвращают истину.
JavaScript сравнивает строки символ за символом, а "a" предшествует "b" в алфавите - следовательно, меньше, чем.
В вашем случае это работает так -
1 "аааа" <"а б"
сравнивает первые два символа "а" - все равны, давайте перейдем к следующему символу.
2 "a a aa" <"a b"
сравнивает вторые символы "а" с "б" - ура! "а" предшествует "б". Возвращает истину.
Вы говорите, что сравнение для сортировки. Тогда я предлагаю вместо этого:
"a".localeCompare("b");
Возвращается -1
поскольку "a" < "b"
, 1
или же 0
в противном случае, как вам нужно для Array.prototype.sort()
Имейте в виду, что сортировка зависит от локали. Например, на немецком языке, ä
это вариант a
, так "ä".localeCompare("b", "de-DE")
возвращается -1
, По шведски, ä
является одной из последних букв в алфавите, так "ä".localeCompare("b", "se-SE")
возвращается 1
,
Без второго параметра localeCompare
, локаль браузера используется. Что по моему опыту никогда не является тем, что я хочу, потому что тогда он будет сортироваться иначе, чем сервер, который имеет фиксированную локаль для всех пользователей.
Просто помните, что сравнение строк, например "x" > "X", чувствительно к регистру
"aa" < "ab" //true
"aa" < "Ab" //false
Ты можешь использовать .toLowerCase()
сравнивать без учета регистра.
Допустим, у нас есть массив объектов:
{ name : String }
тогда мы можем отсортировать наш массив следующим образом:
array.sort(function(a, b) {
var orderBool = a.name > b.name;
return orderBool ? 1 : -1;
});
Примечание: будьте осторожны с заглавными буквами, вам может потребоваться перевести строку в нижний регистр из-за вашей цели.
"a".localeCompare("b")
должен на самом деле вернуться -1
поскольку a
сортирует перед b