Javascript 强制localeCompare区分大小写

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

我正在尝试使用JavaScript的函数对字符串进行排序

我对在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”与“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