是否可以为 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]);