Я пытаюсь сравнить 2 строки в алфавитном порядке для сортировки. Например, я хочу иметь логическую проверку типа if('aaaa' < 'ab')
. Я попробовал, но это не дает мне правильных результатов, поэтому я предполагаю, что это не правильный синтаксис. Как это сделать в jquery или Javascript?
Сравнение 2 строк в алфавитном порядке для сортировки
Ответ 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()
для сравнения без учета регистра.
Ответ 4
"a".localeCompare("b")
должен действительно возвращать -1
, так как a
сортирует перед b
Ответ 5
Допустим, у нас есть массив объектов:
{ name : String }
тогда мы можем отсортировать наш массив следующим образом:
array.sort(function(a, b) {
var orderBool = a.name > b.name;
return orderBool ? 1 : -1;
});
Примечание: будьте осторожны с заглавными буквами, вам может потребоваться привести строку в нижний регистр из-за вашей цели.