3

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

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

如果我对它们进行排序,ñ默认情况下会走到最后:

letters.sort() // [ "a", "n", "x", "ñ" ]

但是,使用 new 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);
4

1 回答 1

1

通过使用“灵敏度”选项,您也许能够得到您想要的。

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]);
于 2015-01-22T20:24:15.763 回答