gpt4 book ai didi

javascript - localeCompare 与 ASCII 风格的字典序排序

转载 作者:行者123 更新时间:2023-11-30 14:43:52 24 4
gpt4 key购买 nike

我正在尝试我希望成为一个简单的编码练习:使用 ASCII 样式的字典顺序对 Javascript 字符串进行排序(例如,数字在大写字母之前,在小写字母之前...)。

这是一个片段:

var str1 = "ab";
var str2 = "Ab";
var n = str1.localeCompare(
str2, "en", {sensitivity: 'variant', caseFirst: "upper"}
);

在这种情况下,我希望 n1,但它返回 -1

来自 this 上的文档页:

  • sensitivity 值设置为 variant 将允许区分所有基本字母和重音字母,包括大小写
  • caseFirst 值设置为 upper 将强制大写字母与小写字母进行比较
  • 缺少 usage 参数化将默认为 sort,无论如何这里都不相关,因为我正在指定 variant
  • 缺少 ignorePunctuation 参数化将默认为 false

我假设这些选项覆盖了默认的语言环境设置,尽管我找不到关于此事的任何具体信息。事实上,如果它默认为 en-US 并且优先于选项,那么我想大小写将被忽略(例如,参见已接受的答案 here )。

我做错了什么?

注意事项

  • 我在这里提到“ASCII”的唯一目的是确定一种不忽略大小写的排序顺序,并在适用的情况下将大写字母排在小写字母之前。我最终也会将其用于 unicode 字符串。
  • 正如一些人所建议的,这可能取决于引擎。使用 Firefox ESR 52.6.0 和 Chromium 64.0.3282.167 复制。

最佳答案

我不确定你是怎么得到 -1 的.当我运行您提供的确切代码时,我得到 1 .我只得到 -1str1.localeCompare(str2) 测试时.也许记下 this warning :

Implementations are not required to support this property.

如果您的 sensitivity设置为 variant ,还有你的 caseFirstupper ,这已经是字符串的默认比较。语言环境通常用于同义字符变体。此外,在 ASCII 和 Unicode 中,大写字母已经排在小写字母之前。所以你只需要 -(str1 < str2) || +(str1 > str2)并完全避免函数调用:

var str1 = "ab";
var str2 = "Ab";
var a = str1.localeCompare(
str2, "en", {sensitivity: 'variant', caseFirst: "upper"}
);
var b = -(str1 < str2) || +(str1 > str2);
console.log(a, b);

关于javascript - localeCompare 与 ASCII 风格的字典序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49258319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com