在捷克语中对数组进行排序,localeCompare

sla*_*5er 8 html javascript sorting jquery

我有问题用捷克名称排序数组.它适用于普通字符,但不适用于特殊字符.'Sb','St','Šk'; 特殊的Š应该在其他两个词之后,但它以不同的顺序结束.这是一个简单的代码.

var tmpArr = ['Sb', 'BE', 'De', 'CS', 'Au', 'Šk', 'De', 'St', 'Ci', 'št'];

function mySort(s1, s2) {
return s1.localeCompare(s2 ,'cz', {sensitivity: "variant"});
}

var sorted = tmpArr.sort(mySort);

console.log(tmpArr);

for(var i in sorted){
console.log(sorted[i]);
}
Run Code Online (Sandbox Code Playgroud)

这应该也适用于所有浏览器.

fsw*_*fsw 7

DobrýDen,

因为这说明

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

在常见浏览器中未实现区域设置比较的高级选项.

如果你只需要Chech语言,那么最好使用字符映射来实现你自己的字符串比较:

var charMapL = " 0123456789aábc?d?eé?fghiíjklmn?oópqr?sšt?uú?vwxyýzž";
var charMapU = " 0123456789AÁBC?D?EÉ?FGHIÍJKLMN?OÓPQR?SŠT?UÚ?VWXYÝZŽ";
var charsOrder = {};
for(var i in charMapL.split('')) {
    charsOrder[charMapL[i]] = parseInt(i);
    charsOrder[charMapU[i]] = parseInt(i);
}

function mySort(s1, s2) {
    var idx = 0;
    while ( (idx < s1.length) && (idx < s2.length) && (charsOrder[s1[idx]] == charsOrder[s2[idx]])) {
        idx ++;
    }
    if ((idx == s1.length) && (idx == s2.length)) return 0;
    if (idx == s1.length) return 1;
    if (idx == s2.length) return -1;
    return charsOrder[s1[idx]] > charsOrder[s2[idx]] ? 1 : (charsOrder[s1[idx]] < charsOrder[s2[idx]] ? -1 : 0);
}

console.log(tmpArr);
tmpArr.sort();
console.log(tmpArr);
tmpArr.sort(mySort);
console.log(tmpArr);
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/GNNBc/1/

  • @ sla55er排序带有数字的字符串可能无法正常工作因为你必须在字符映射中添加数字.这个功能也可以改进地以某种方式处理每个非字母数字字符. (2认同)