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

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

148051 次浏览

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

"a" < "b"


"aa" < "ab"


"aaa" < "aab"

一切归真。

JavaScript 逐字符比较字符串,字母表中“ a”在“ b”之前,因此小于。

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

1. “ aaa”< “ b”

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

2. “ a aa”< “ a B

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

只要记住像“ x”> “ X”这样的字符串比较是区分大小写的

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

你可以使用 .toLowerCase()进行比较而不需要大小写敏感性。

你说比较是为了排序的目的,那么我建议用 LocaleCompare代替:

"a".localeCompare("b");

它从 "a" < "b"开始返回 -1,否则返回 1或者 0,就像你需要 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”之前。

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

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

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

{ name: String }

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

array.sort((a, b) => {
if (a.name === b.name) return 0;
return a.name > b.name ? 1 : -1;
});

注意: 小心大写字母。您可能需要根据用途将字符串强制转换为小写。