有没有JavaScript的库或跨浏览器本地实现来按字母顺序对丹麦字符串数组进行排序?
[奥尔堡,索罗...]
有没有JavaScript的库或跨浏览器本地实现来按字母顺序对丹麦字符串数组进行排序?
[奥尔堡,索罗...]
var arr = ['Aalborg', 'Sorø']; // array to sort
var myLocale = 'da-DK'; // danish locale
var sortedArr = arr.sort(function(a,b) { return a.localeCompare(b, myLocale); }); // sort
console.log(sortedArr);
很遗憾,@Tibos的解决方案不起作用。丹麦字母 æøå
的排序结果与丹麦人的期望不符。而使用 aa
也肯定行不通,因为它被认为是一种老式的 å
。唯一的解决办法是制定一个“手持式”排序算法。
以下是可行的解决方案:
arr.sort(function(a,b) {
function getCode(c) {
c=c.toLowerCase();
if (c.substring(0,2)=='aa') return 300;
switch (c.charCodeAt(0)) {
case 229 : //å
return 299;
break;
case 248 : //ø
return 298;
break;
case 230 : //æ
return 297;
break;
default :
return c.charCodeAt(0);
break;
}
}
return getCode(a) - getCode(b);
});
var arr = ['Ølby', 'Ålestrup', 'Ærø', 'Almindingen', 'Aalborg', 'Sorø'];
按照本地排序
["Ølby", "Ærø", "Ålestrup", "Sorø", "Almindingen", "Aalborg"]
["Almindingen", "Sorø", "Ærø", "Ølby", "Ålestrup", "Aalborg"]
更新
@tibos是正确的。上述算法只是按照首字母排序。下面的函数将字符串转换为整数数组,根据上述算法中的排序方案。然后比较整数数组 - 通过这种方式,字符串按其完整长度进行排序:
arr.sort(function(a,b) {
var d, e, f;
function getIntArray(c) {
var array=[];
c=c.toLowerCase();
for (var i=0;i<c.length;i++) {
if (c.substring(i,2)=='aa') {
array.push(300);
i++;
} else {
switch (c.charCodeAt(i)) {
case 229 : //å
array.push(299);
break;
case 248 : //ø
array.push(298);
break;
case 230 : //æ
array.push(297);
break;
default :
array.push(c.charCodeAt(i));
break;
}
}
}
return array;
}
d=getIntArray(a);
e=getIntArray(b);
for (f=0;f<d.length;f++) {
if (d[f]!=e[f]) {
return d[f] - e[f];
}
}
});
测试数组:
var arr = ['Ølby', 'Ålborg', 'Århus', 'Ålestrup', 'Åkikrkeby', 'Ærø', 'Almindingen', 'Aalborg', 'Sorø'];
现在已经完整地排序:
["Almindingen", "Sorø", "Ærø", "Ølby", "Åkikrkeby", "Ålborg", "Ålestrup", "Århus", "Aalborg"]
aa
的选项和测试脚本 -> https://github.com/davidkonrad/sortda - davidkonrad
aa > s
。算了吧,我不太了解丹麦语来弄清所有的排序规则。 - Tibosarr.sort((a,b) => a.localeCompare(b, myLocale));
- Eneko