为什么javascript localeCompare会在句点之前对下划线进行排序?

时间:2015-07-17 01:34:28

标签: javascript string sorting compare

我试图比较字符串以进行排序,我想在下划线之前对句点进行排序(因为它在ASCII表之后)。有关localeCompare为什么不这样做的任何建议/解释?

作为一个例子,我希望tester.java来到tester_1.java

之前

" apple" .localeCompare(" tomatoe")返回-1,因为苹果较小 " tester.java" .localeCompare(" tester_1.java")当我希望它返回-1时返回1

1 个答案:

答案 0 :(得分:0)

我认为你的意思是.localeCompare()正确(这在你的问题中被误解了)?那么你的订单是以哪种方式完成的?你可能有错误的方法:

var array = [ "_a", ".b" ]
array.sort()             // returns [ ".b", "_a" ]
array.sort(function(a,b) { return a.localeCompare(b) }) // returns [ ".b", "_a" ]
array.sort(function(a,b) { return b.localeCompare(a) }) // returns [ "_a", ".b" ]

看看引擎盖下:

var str1 = "_a",
    str2 = ".b";

str1.localeCompare(str2)           // 49
str2.localeCompare(str1)           // -49

因此,如果您正在以错误的顺序进行比较,那么它就是“逆转”

var array = [ ".c", "_a", ".b" ]
array.sort(function(a,b) { return a.localeCompare(b) })  // [ ".b", ".c", "_a" ]
array.sort(function(a,b) { return b.localeCompare(a) })  // [ "_a", ".c", ".b" ]