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

Javascript 按字母顺序比较两个字符串以进行排序,javascript,jquery,Javascript,Jquery,为了排序,我尝试按字母顺序比较两个字符串。例如,我想做一个布尔检查,比如if('aaaa'

为了排序,我尝试按字母顺序比较两个字符串。例如,我想做一个布尔检查,比如
if('aaaa'<'ab')
。我试过了,但是没有给出正确的结果,所以我想这不是正确的语法。如何在jquery或Javascript中实现这一点?

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

"a" < "b"

"aa" < "ab"

"aaa" < "aab"
“a”<“b”
“aa”<“ab”
“aaa”<“AAAB”
所有结果都是真的

JavaScript将字符串逐字符进行比较,字母表中“a”位于“b”之前,因此小于

在你的情况下,它是这样工作的-

一,。“a​aaa“<”​a​b“

比较前两个“a”字符-所有字符都相等,让我们移到下一个字符

二,。“a​a​​aa“<”a​b​​"


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

请记住,像“x”>“x”这样的字符串比较区分大小写

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

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

您确实说比较是为了排序。那么我建议您:

"a".localeCompare("b");
它返回
-1
,因为
“a”
1
0
否则,就像您需要的那样

请记住,排序取决于语言环境。例如,在德语中,
ä
a
的变体,因此
“ä”。localeCompare(“b”、“de”)
返回
-1
。在瑞典语中,
ä
是字母表中最后的字母之一,因此
“ä”。localeCompare(“b”、“se”)
返回
1

如果没有
localeCompare
的第二个参数,则使用浏览器的区域设置。根据我的经验,这永远不是我想要的,因为这样它的排序将不同于服务器,服务器对所有用户都有一个固定的区域设置。

“a”。localeCompare(“b”)
实际上应该返回
-1
,因为
a
b
之前排序


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

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

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

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

您看到了吗?这就是您的操作方式。您希望得到什么结果?表达式
'aaaa'
返回
true
。有关特殊字符(如č、č、š、Ž、Ž)的讨论,请参阅这是内置的na当然!要记住的是大写。
“a”<“b”==true
“a”<“b”==false
。是的,它排序asciibetically@chrisjshields-哦,哇-我以前从未听说过这个词…我喜欢它!+1还值得一提的是,这也适用于案例(
“aa”。localeCompare(“ab”)
=“aa”。localeCompare(“ab”)对于我能想到的任何语言环境),甚至在旧版本的IE中也能工作。这应该是公认的答案!+1对于Peter来说;这更符合Javascript数组排序的工作方式,因此它更有用,而且我认为这更符合OP的要求。我想,这应该是正确的答案。这是实现字母顺序(而不是Unicode)的唯一方法字符串比较。这似乎真的很管用,即使是字母数字值也是如此。谢谢。如果你是想对我的答案发表评论,那你是对的。我的答案过去错误地将结果显示为1,所以我纠正了这一点。如果它们相等,用于排序的函数应该返回0。这个函数只返回-1或1。@Steve-嗯,从实用角度讲,这是可以的,因为用户不会有任何改变。也就是说,我同意-这不是一个符合规范的比较器,它会导致不必要的相等字符串交换。在小数组(或足够独特的数组)上不会显着,但在具有几乎相同元素的大型集合上会减慢速度。