【发布时间】:2025-12-25 18:35:12
【问题描述】:
我正在尝试根据对象的name 属性对对象数组进行排序。有些名字以“Æ”开头,我希望它们像“Ae”一样被排序。我目前的解决方案如下:
myArray.sort(function(a, b) {
var aName = a.name.replace(/Æ/gi, 'Ae'),
bName = b.name.replace(/Æ/gi, 'Ae');
return aName.localeCompare(bName);
});
我觉得应该有更好的方法来处理这个问题,而不必手动替换每个特殊字符。这可能吗?
如果有什么不同,我会在 Node.js 中执行此操作。
【问题讨论】:
-
我不这么认为。您还可以创建自己的 abecedary,在您想要的位置包含“Æ”。但是之后会被当作一个字符来处理,所以效果和当作两个字符来处理是不一样的。
-
为什么要这样排序? 'Æ' 通常出现在 'Z' 之后。
-
@PaulButcher 我正在尝试匹配已经确定“Æ”本质上是“Ae”的东西。我个人也认为将“Æ”放在其他任何地方都是不直观的。
-
RE 前者 - 如果 Æ 在您使用的环境中是 AE,那么为什么不立即将其更改为 AE? RE 后者 - 在大多数使用它的现代语言中,按字母顺序将其放在 Z 之后(或在没有 Z 的语言中将 Y 放在 Y 之后)因此,将它放在 Z (或 Y)之后的直观位置。如果你想把它移到不正常的地方,你必须像处理任何其他字母一样做。
-
@PaulButcher 在这种情况下,使用 Æ,如果 Æ 正确属于 Z 之后,那么我知道我必须像我一样进行替换。暂时忽略 Æ -
'À'.localeCompare('Z');返回102,说 À 在 Z 之后。这肯定似乎不直观。出于排序目的,我希望 À 等于 A。 iOS 有排序功能localizedCaseInsensitiveCompare,它将Æ 放在Ae 附近,À 放在A 附近,这让我觉得我所要求的并不完全荒谬。
标签: javascript node.js sorting special-characters