按字母顺序比较2个字符串以进行排序


105

我正在尝试按字母顺序比较2个字符串以进行排序。例如,我想要像这样的布尔检查if('aaaa' < 'ab')。我试过了,但是没有给我正确的结果,所以我猜那不是正确的语法。如何在jquery或Javascript中执行此操作?



那就是你的做法。您期待什么结果?表达式'aaaa' < 'ab'返回true。<!-错误的编辑以删除投票->
Guffa 2012年

Answers:


122

让我们看一些测试用例-尝试在JS控制台中运行以下表达式:

"a" < "b"

"aa" < "ab"

"aaa" < "aab"

全部返回true。

JavaScript会逐个字符地比较字符串,并且字母中的“ a”在“ b”之前,因此小于。

就您而言,它的工作原理如下:

1。“ 一个 AAA”< “ B”

比较前两个“ a”字符-全部相等,然后移至下一个字符。

2。“一个一个 AA” <“一个b

比较第二个字符“ a”和“ b”-哦!“ a”位于“ b”之前。返回true。


2
关于特殊字符,如C,C,S,S,Z,Z的讨论,参见stackoverflow.com/questions/6909126/...
dsdsdsdsd

4
令人印象深刻的是它是内置的!
斯拉瓦·克尼亚泽夫

11
要记住的是大写。"a" < "b" === true "a" < "B" === false
泰德·范·瑞尔

141

您确实说比较是出于排序目的。然后我建议:

"a".localeCompare("b");

它返回-1因为"a" < "b"10以其他方式,像你需要Array.prototype.sort()

请记住,排序取决于语言环境。例如,德语ä是的变体a,所以"ä".localeCompare("b", "de-DE")return -1。在瑞典语中,ä是字母中的最后一个字母之一,因此"ä".localeCompare("b", "se-SE")return 1

如果不使用的第二个参数localeCompare,则使用浏览器的语言环境。根据我的经验,这永远不是我想要的,因为那样排序将不同于服务器,服务器对所有用户都具有固定的语言环境。


6
+1还值得一提的是,这也适用于案例("aa".localeCompare("ab")对于我能想到的任何语言环境,==“ aa” .localeCompare(“ Ab”))甚至在旧版本的IE中也可以使用。应该是公认的答案!
user56reinstatemonica8'8

1
彼得+1;无论如何,这与Javascript数组排序的工作方式更加兼容,因此它更加有用,而且我认为这更是OP所要求的。
即将

我想,这应该是正确的答案。进行字母(而非Unicode)字符串比较的唯一方法。
凌波

即使对于字母数字值,这似乎确实可以解决问题。谢谢。
约书亚·品特

30

请记住,字符串比较(例如“ x”>“ X”)区分大小写

"aa" < "ab" //true
"aa" < "Ab" //false

您可以使用.toLowerCase()比较而不区分大小写。



3

假设我们有一个对象数组:

{ name : String }

然后我们可以对数组进行如下排序:

array.sort(function(a, b) {
    var orderBool = a.name > b.name;
    return orderBool ? 1 : -1;
});

注意:请注意大写字母,由于目的,您可能需要将字符串强制转换为小写。


如果它们相等,则用于排序的函数应返回0。此功能仅返回-1或1
史蒂夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.