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

comparing 2 strings alphabetically for sorting purposes

本文关键字:字符串 排序 顺序 比较      更新时间:2023-09-26

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

你确实说比较是为了排序目的。然后我建议 localeCompare 代替:

"a".localeCompare("b");

它返回自 "a" < "b" 以来-1,否则10,就像你需要 Array.prototype.sort() 一样

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

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

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

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

这将返回 -1,认识到 5 作为数字小于 21。如果没有{ numeric: true }它返回 1,因为 "2" 在 "5" 之前排序。在许多实际应用中,用户希望"a5b"出现在"a21b"之前。

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

"a" < "b"
"aa" < "ab"
"aaa" < "aab"

全部返回 true。

JavaScript 逐个字符比较字符串,字母表中的"a"在"b"之前 - 因此小于。

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

1 ."A AAA"<"AB"

比较前两个"A"字符 - 全部相等,让我们移动到下一个字符。

阿拉伯数字。 "aaaa" <"ab"

比较第二个字符"A"和"B" - 哎呀!"a"在"b"之前。返回 true。

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

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

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

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

{ name: String }

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

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

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

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

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