Сравнение 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

http://www.w3schools.com/jsref/jsref_localecompare.asp

Другие вопросы по тегам