按字母顺序比较 2 个字符串以进行排序
Posted
技术标签:
【中文标题】按字母顺序比较 2 个字符串以进行排序【英文标题】:comparing 2 strings alphabetically for sorting purposes 【发布时间】:2012-04-29 04:58:39 【问题描述】:我正在尝试。例如,我想要一个像if('aaaa' < 'ab')
这样的布尔检查。我试过了,但它没有给我正确的结果,所以我猜这不是正确的语法。我如何在 jquery 或 javascript 中做到这一点?
【问题讨论】:
你见过***.com/questions/1134976/…吗? 您就是这样做的。你期待什么结果?表达式'aaaa' < 'ab'
返回true
。
【参考方案1】:
您确实说比较是为了排序。然后我建议改为localeCompare:
"a".localeCompare("b");
它返回-1
,因为"a" < "b"
、1
或0
否则,就像你需要Array.prototype.sort() 一样
请记住,排序取决于区域设置。例如。在德语中,ä
是a
的变体,所以"ä".localeCompare("b", "de-DE")
返回-1
。在瑞典语中,ä
是字母表中的最后一个字母,因此"ä".localeCompare("b", "se-SE")
返回1
。
如果没有localeCompare
的第二个参数,则使用浏览器的区域设置。根据我的经验,这绝不是我想要的,因为那样它的排序方式就会与服务器不同,服务器对所有用户都有固定的语言环境。
此外,如果您要排序的内容包含数字,您可能需要:
"a5b".localeCompare("a21b", undefined, numeric: true )
这将返回 -1,将 5 视为小于 21 的数字。如果没有 numeric: true
,它将返回 1,因为“2”排在“5”之前。在许多实际应用中,用户期望“a5b”出现在“a21b”之前。
【讨论】:
+1 还值得一提的是,这也适用于案例("aa".localeCompare("ab")
== "aa".localeCompare("Ab") 对于我能想到的任何语言环境),即使在旧版本中也可以使用的IE。应该是公认的答案!
+1 给彼得;这与 Javascript 数组排序的工作方式更兼容,因此它更有用,我认为这更多的是 OP 所要求的。
我想,这应该是正确的答案。进行字母(非 Unicode)字符串比较的唯一方法。
这似乎真的可以解决问题,即使对于字母数字值也是如此。谢谢。【参考方案2】:
让我们看一些测试用例 - 尝试在 JS 控制台中运行以下表达式:
"a" < "b"
"aa" < "ab"
"aaa" < "aab"
全部返回真。
JavaScript 逐个字符地比较字符串,在字母表中“a”在“b”之前——因此小于。
在你的情况下,它是这样工作的 -
1 . "aaaa" ab"
比较前两个“a”字符 - 都相等,让我们移到下一个字符。
2 。 "aaaa" b"
比较第二个字符“a”和“b”——哇! “a”在“b”之前。返回真。
【讨论】:
有关特殊字符的讨论,例如 Č,č,Š,š,Ž,ž,请参阅 ***.com/questions/6909126/… 令人印象深刻的是,这是本机内置的! 要记住的是大写字母。"a" < "b" === true
"a" < "B" === false
.
是的,它按 asciibetically 排序
@chrisjshields - 哇哦 - 我以前从未听过这个词......我喜欢它!【参考方案3】:
请记住,像 "x" > "X" 这样的字符串比较是区分大小写的
"aa" < "ab" //true
"aa" < "Ab" //false
您可以使用.toLowerCase()
进行不区分大小写的比较。
【讨论】:
【参考方案4】:"a".localeCompare("b")
实际上应该返回-1
,因为a
在b
之前排序
http://www.w3schools.com/jsref/jsref_localecompare.asp
【讨论】:
如果您的意思是对我的回答发表评论,那么您是对的。我的答案曾经错误地将结果显示为 1,所以我更正了。【参考方案5】:假设我们有一个对象数组:
name : String
然后我们可以按如下方式对数组进行排序:
array.sort(function(a, b)
var orderBool = a.name > b.name;
return orderBool ? 1 : -1;
);
注意:请注意大写字母,由于您的目的,您可能需要将字符串转换为小写。
【讨论】:
如果它们相等,用于排序的函数应该返回 0。此函数仅返回 -1 或 1。 @Steve - 好吧,务实地说,这没关系,因为用户不会有任何改变。也就是说,我同意 - 这不是一个符合规范的比较器,它会导致不必要的相等字符串交换。在小型(或足够独特的)数组上不会引起注意,但在具有大部分相同元素的大型集合上会减慢速度。以上是关于按字母顺序比较 2 个字符串以进行排序的主要内容,如果未能解决你的问题,请参考以下文章