Javascript 强制localeCompare区分大小写
我正在尝试使用JavaScript的函数对字符串进行排序 我对在devTools控制台中运行以下行的结果感到惊讶:Javascript 强制localeCompare区分大小写,javascript,string-comparison,Javascript,String Comparison,我正在尝试使用JavaScript的函数对字符串进行排序 我对在devTools控制台中运行以下行的结果感到惊讶: "a".localeCompare("b") // returns: -1 "A".localeCompare("b") // returns: -1 另一项测试: "b".localeCompare("a") // returns: 1 "B".localeCompare("a") // returns: 1 即使我对我的分类更加具体,我也会得到同样的结果: "a".loca
"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”与“a”的比较不应该有相反的结果吗?LocalCompare可以区分大小写,由
{sensitivity:'case'}
或unicode扩展名启用:u-kf-upper
或u-kf-lower
报告说:
结果用于按排序顺序对字符串值排序
由系统默认区域设置指定
或者可以添加为参数的区域设置
对于区分大小写的订单,en US的默认值为“较低”,包括:
aAbBcC ...
您可以将其更改为“upper”,即:
AaBbCc ...
该测试表明,从
大写
切换到小写
只会影响同一个字母,不会对大写字母进行排序,反之亦然
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
使用选项或Unicode扩展名kn
可以启用数字比较(kn true
):
但是,数字总是在字母之前:
var d = "1".localeCompare("a", 'en-US-u-kn-true'); // -1
var e = "1".localeCompare("a", 'en-US'); // -1
我打算建议提供一个
locales
参数,但是,至少对于“en”
来说,这没有什么区别。还尝试了“caseFirst”
选项,但这也没有什么区别,尽管它确实说不需要实现来支持此属性。对不起,我不太理解您的困惑,按照字母顺序,b
如何出现在A
之前?@Teemu我在问题中添加了另一个例子来说明相反的情况……b不应该出现在“A”之前吗?呃。。。不,那会打破字母顺序。如果您需要一个所有大写字母都优先的顺序,那么您必须实现自己的排序功能。这可能取决于区域设置,因为区分大小写的顺序是AaBbCcDd…
。您可以使用localeCompare
将其切换到aAbBcCdD
。知道如何在字符串后对数字进行排序吗?像“109”.localCompare('a')
@Vadorequest不,我认为这在localCompare中是不可能的。嗨,我正在尝试对这个数组进行排序=[{name:“Acuityads”},{name:“alpha”}];。我要先看阿尔法。sort(函数(a,b){返回a.name.localeCompare(b.name,'en-US');});它首先回归敏锐。我正在努力实现aAbBcC
var d = "1".localeCompare("a", 'en-US-u-kn-true'); // -1
var e = "1".localeCompare("a", 'en-US'); // -1