是否可以为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);发布于 2015-01-22 20:24:15
通过使用“敏感性”选项,您可以得到想要的东西。
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]);https://stackoverflow.com/questions/28097554
复制相似问题