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”之前,因此小于
在你的情况下,它是这样工作的-
一,。“aaaa“<”ab“
比较前两个“a”字符-所有字符都相等,让我们移到下一个字符
二,。“aaaa“<”ab"
比较第二个字符“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-嗯,从实用角度讲,这是可以的,因为用户不会有任何改变。也就是说,我同意-这不是一个符合规范的比较器,它会导致不必要的相等字符串交换。在小数组(或足够独特的数组)上不会显着,但在具有几乎相同元素的大型集合上会减慢速度。