是否可以为Javascript创建自定义 Intl.Collator 对象?假设我有:

var letters = [ "a", "n", "ñ", "x" ]

如果我对它们进行排序,则默认情况下ñ将转到末尾:
letters.sort() // [ "a", "n", "x", "ñ" ]

但是,使用新的Intl.Collator,我可以做到:
letters.sort(Intl.Collator('es').compare)

根据西类牙语(es)规则排序,然后将ñ放在n之后。
[ "a", "n", "ñ", "x" ]

现在,假设出于某种原因,我想编写自己的Collator,将ñ放在首位?
[ "ñ", "a", "n", "x" ]

我尚未找到有关为Intl.Collator定制新规则集的任何信息。

这可能吗?

更新

是的,有可能。

更新:

我在ECMAscript i18n标准2中找到了有关如何创建自定义语言环境的建议:

function MyCollator​(locales, options) {
  Intl​.Collator​.call​(this, locales, options);
  // initialize MyCollator properties
}
MyCollator​.prototype = Object​.create​(Intl​.Collator​.prototype);
MyCollator​.prototype​.constructor = MyCollator;
// add methods to MyCollator​.prototype
var collator = new MyCollator​("de-u-co-phonebk");
a​.sort​(collator​.compare);

最佳答案

您可以使用“灵敏度”选项获得所需的信息。
Intl.Collator.prototype不可写。

您可能可以创建带有排序和字符的数组,并设置自己的排序顺序。

$convert[character]= sortOrder ;

阵列结构将取决于目的。
使用这种结构,您将不得不再次将结果转换回去。
$letters = [$convert[a],$convert[n],$convert[ñ],$convert[x]);

在大多数情况下,此选项可能效果最好。
$letters = [[$convert[a],a],[$convert[n],n],[$convert[ñ],[ñ],[$convert[x],x]);

关于javascript - 自定义国际整理者?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28097554/

10-09 23:39