Подтвердить что ты не робот

Сравнение 2 строк в алфавитном порядке для сортировки

Я пытаюсь сравнить 2 строки в алфавитном порядке для сортировки. Например, я хочу иметь логическую проверку типа if('aaaa' < 'ab'). Я попробовал, но это не дает мне правильных результатов, поэтому я предполагаю, что это не правильный синтаксис. Как это сделать в jquery или Javascript?

4b9b3361

Ответ 1

Давайте рассмотрим некоторые тестовые примеры - попробуйте запустить следующие выражения в консоли JS:

"a" < "b"

"aa" < "ab"

"aaa" < "aab"

Все возвращают true.

JavaScript сравнивает строковый символ по символу, а "a" предшествует "b" в алфавите - следовательно, меньше.

В вашем случае это работает так -

1. " a aaa" < " а Ь"

сравнивает первые два символа "a" - все равны, позволяет перейти к следующему символу.

2. "a a aa" < "a b"

сравнивает второй символ "a" с "b" - кричит! "a" предшествует "b" . Возвращает true.

Ответ 2

Вы говорите, что сравнение предназначено для сортировки. Тогда я предлагаю вместо этого:

"a".localeCompare("b");

Он возвращает -1, так как "a" < "b", 1 или 0 в противном случае, как вам нужно для Array.prototype.sort()

Имейте в виду, что сортировка зависит от языка. Например. на немецком языке ä является вариантом a, поэтому "ä".localeCompare("b", "de-DE") возвращает -1. На шведском языке ä является одной из последних букв в алфавите, поэтому "ä".localeCompare("b", "se-SE") возвращает 1.

Без второго параметра localeCompare используется локаль браузера. Который в моем опыте никогда не то, что я хочу, потому что тогда он будет сортироваться по-другому, чем сервер, который имеет фиксированную локаль для всех пользователей.

Ответ 3

Просто помните, что сравнение строк, например "x"> "X", чувствительно к регистру

"aa" < "ab" //true
"aa" < "Ab" //false

Вы можете использовать .toLowerCase() для сравнения без учета регистра.

Ответ 5

Допустим, у нас есть массив объектов:

{ name : String }

тогда мы можем отсортировать наш массив следующим образом:

array.sort(function(a, b) {
    var orderBool = a.name > b.name;
    return orderBool ? 1 : -1;
});

Примечание: будьте осторожны с заглавными буквами, вам может потребоваться привести строку в нижний регистр из-за вашей цели.