Заставить localeCompare учитывать регистр
Я пытаюсь использовать JavaScript методом localecompare функция сортировки строк.
Я был удивлен результатами выполнения следующих строк в консоли devTools:
"a".localeCompare("b") // returns: -1
"A".localeCompare("b") // returns: -1
еще один тест:
"b".localeCompare("a") // returns: 1
"B".localeCompare("a") // returns: 1
даже когда я более конкретен в своем роде, я получаю тот же результат:
"a".localeCompare("b", { usage: "sort", sensitivity: 'variant' }) // -1
"A".localeCompare("b", { usage: "sort", sensitivity: 'variant' }) // -1
"b".localeCompare("a", { usage: "sort", sensitivity: 'variant' }) // 1
"B".localeCompare("a", { usage: "sort", sensitivity: 'variant' }) // 1
Я хочу использовать localeCompare для сравнения строк в регистр путь, поэтому не должно" b " по сравнению с "a" и " B" по сравнению с "а" имеют противоположные результаты?
1 ответов
LocalCompare может быть дело-Сенситив, включена { sensitivity: 'case'}
или расширение unicode:u-kf-upper
или u-kf-lower
.
на спецификации LocalCompare говорит, что:
результат предназначен для упорядочивания строковых значений в порядке сортировки задается системной локалью по умолчанию
или локаль, которую вы можете добавить в качестве аргумента.
на по умолчанию для en-US по регистру заказ "Нижнем" С:
aAbBcC ...
вы можете изменить его на "верхний", которая составляет:
AaBbCc ...
этот тест показывает, что переключение с upper
to lower
влияет только на ту же букву и не сортирует прописные буквы перед строчными или наоборот.
var b = "A".localeCompare("a", 'en-US-u-kf-lower'); // 1
var c = "A".localeCompare("a", 'en-US-u-kf-upper'); // -1
var d = "A".localeCompare("b", 'en-US-u-kf-upper'); // -1
var e = "A".localeCompare("b", 'en-US-u-kf-lower'); // -1
- может быть локаль, которая сортирует верхний / нижний регистр по-разному, но я не знаю ни одного...
- в международный порядок сортировки нечувствителен к регистру
- порядок сортировки ASCII будет
ACb
- некоторые локали имеют разные порядки: финский, например, протекторы V, такие как W:
Va Wb Vc
...
влияет ли чувствительность к регистру на числовые значения каким-либо образом?
var b = "1".localeCompare("a", 'en-US-u-kf-lower'); // -1
var c = "1".localeCompare("A", 'en-US-u-kf-upper'); // -1
var d = "104".localeCompare("a", 'en-US-u-kf-upper'); // -1
нет, но ...
есть опция, как можно сравнивать числовые значения:kn
с параметром или Расширение Юникода kn
можно включить числовое сравнение (kn-true
):
var b = "10".localeCompare("2", 'en-US-u-kn-true'); // 1
var c = "10".localeCompare("2", 'en-US'); // -1
Однако, цифры всегда перед буквами:
var d = "1".localeCompare("a", 'en-US-u-kn-true'); // -1
var e = "1".localeCompare("a", 'en-US'); // -1