3

例如,chineseName.sort((function(a,b){return a.localeCompare(b)})); javascript 函数 localeCompare 适用于 IE 和 firefox,但不适用于 Chrome。有人知道如何使代码与 Chrome 兼容吗?

4

2 回答 2

0

我刚刚搜索了整个 www 以找到答案,但可惜什么都没有……所以我编写了自己的代码。它是用于丹麦字母的,因此对您来说可能不值钱,但也许其他人会来寻找答案。这是我第一次回答一个问题,所以要温柔...

转换函数:转换函数是将'double-a'(丹麦语)[aa] 转换为丹麦字母[å]。这将使以后更容易逐个字符进行比较。

danishCompareCharacter 函数:该函数是实际的比较函数。它适用于特定的丹麦字符 'æ'、'ø' 和 'å',它们位于丹麦 alfabet 的末尾。

danishCompareString 函数:这是在 javascript 排序函数中用作参数的自定义排序函数。

function convert(stringToConvert)
{
    var returnString = new String();
    var tempLetter;
    for (var j = 0; j < stringToConvert.length; j++)
        {
            if (stringToConvert.toLowerCase()[j] == 'a' &&         stringToConvert.toLowerCase()[j + 1] == 'a')
                {
                    tempLetter = 'å';
                    j++;
                } else
                {
                    tempLetter = stringToConvert.toLowerCase()[j];

                }
            returnString = returnString + tempLetter;
        }
    return returnString;
}

function danishCompareCharacter(firstCharacter, secondCharacter) {
    if ((firstCharacter == 'æ') || (firstCharacter == 'ø') || (firstCharacter == 'å')) {
            if (secondCharacter == 'æ' || secondCharacter == 'ø' || secondCharacter == 'å') {
                    if (firstCharacter == secondCharacter) {
                            return 0;
                        } 
                        if ((firstCharacter == 'æ') || secondCharacter == 'å')
                                {
                                    return -1;
                                }
                            if ((firstCharacter == 'å') || secondCharacter == 'æ') {
                                    return 1;
                                }
                            }
                return 1;
            } 
    if (secondCharacter == 'æ' || secondCharacter == 'ø' || secondCharacter == 'å') {
            return -1;
        }
        if(firstCharacter==secondCharacter){
                return 0;}
    if( firstCharacter < secondCharacter)
        {
            return -1;
        } 
        return 1;
}

function danishCompareString(a, b)
{
    var result = 0;
    var length = b.length;
    if (a.length < b.length)
        {
            length = a.length;
        }
    for (var i = 0; i < length; i++) {
            result = danishCompareCharacter(a[i], b[i]);
            if (result != 0)
                {
                    return result;
                } 
            }
    return result;
}

function SortMyArray(arr) {
//This works in ALL browsers
arr.sort(function (a, b) {
    return (danishCompareString(convert(a[0]), convert(b[0])));

    //And this would have worked in any browser BUT chrome...
    //        if (a[0].localeCompare(b[0]) == 0) { return 0; }
    //        if (a[0].localeCompare(b[0]) < 0) { return -1; }
    //        else { return 1; }
});
}
}
于 2012-04-19T06:41:00.850 回答
0

它现在在 Chrome 中运行良好(5 年后)。

既然您提到了中文名称,那么对中文名称数组进行排序的函数将是:

chineseNames.sort(function (a, b) {
  return a.localeCompare(b, 'zh-CN');
});

在 ES2015 中它将是:

chineseNames.sort((a, b) => a.localeCompare(b, 'zh-CN'));

有关其他语言标识符,请参见http://www.i18nguy.com/unicode/language-identifiers.html

于 2017-06-15T21:17:39.383 回答