126

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

4

5 回答 5

180

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

"a".localeCompare("b");

它返回-1since或以其他方式返回"a" < "b",就像您需要Array.prototype.sort()10

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

如果没有 to 的第二个参数localeCompare,则使用浏览器的语言环境。根据我的经验,这绝不是我想要的,因为那样它的排序方式就会与服务器不同,服务器对所有用户都有固定的语言环境。

此外,如果您要排序的内容包含数字,您可能需要:

"a5b".localeCompare("a21b", undefined, { numeric: true })

这将返回 -1,将 5 视为小于 21 的数字。没有{ numeric: true }它返回 1,因为“2”排在“5”之前。在许多实际应用中,用户期望“a5b”出现在“a21b”之前。

于 2016-01-13T23:38:51.667 回答
137

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

"a" < "b"

"aa" < "ab"

"aaa" < "aab"

全部返回真。

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

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

1. " a aa" < "​<strong>a​b"

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

2. “a​<strong>a​​​aa”<“a​<strong>b​​​”

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

于 2012-04-17T20:05:42.607 回答
32

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

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

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

于 2013-07-28T07:29:42.100 回答
8

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

http://www.w3schools.com/jsref/jsref_localecompare.asp

于 2016-09-12T20:13:22.503 回答
5

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

{ name : String }

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

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

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

于 2019-08-22T15:49:36.893 回答