gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 13:47:29 26 4
gpt4 key购买 nike

我在用捷克名字对数组进行排序时遇到问题。它适用于普通字符,但不适用于特殊字符。 '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]);
}

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

最佳答案

多布里登,

正如这里所述

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);

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

关于javascript - 在捷克语中对数组进行排序,localeCompare,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17542108/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com