是否存在库或跨浏览器的本机实现,以按字母顺序对JavaScript中的丹麦字符串数组进行排序?

最佳答案

不幸的是@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"]

09-25 16:33
查看更多