如何使用区域设置在 Chrome 浏览器中对字符串进行排序时进行比较
How to use localeCompare when sorting strings in Chrome browser?
例如,chineseName.sort((function(a,b){return a.localeCompare(b)}));
javascript 函数 localeCompare 适用于 IE 和 Firefox,但在 Chrome 中则不然。有人知道如何使代码与Chrome兼容吗?
我刚刚搜索了整个 www 以找到答案,但唉什么都没有......所以我做了自己的代码。它是丹麦字母,所以对你来说可能不值钱,但也许其他人来寻找答案。这是我对一个问题的第一个回答,所以要温柔...
转换函数:转换函数是将"双 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; }
});
}
}
它现在可以在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。
相关文章:
- Javascript排序字符串或数字
- 根据另一个数组对数组进行排序,包括位置和字符串[ES6]
- 根据Javascript中的字符串值对数组的数组进行排序
- Sencha Ext JS排序标准以字符串而不是JSON的形式发送
- 可以用javascript对包含数字的字符串进行排序
- 如何对字母数字字符串值进行排序
- AngularJS/Javascript:使用运算符对字符串进行排序
- 按字母顺序、数字顺序和特殊字符对字符串数组进行排序
- 通过自定义字母javascript对字符串进行排序
- 按表示节号的字符串排序的下划线
- Javascript字符串排序
- 自定义javascript字符串排序比较器
- 在javascript中按两个或多个子字符串排序字符串数组
- JavaScript -按时间字符串排序
- 字符串排序在算法上是如何工作的
- 按字符串排序Javascript对象数组
- 根据子字符串中的数字对字符串排序
- Javascript货币字符串排序
- Safari浏览器Javascript数组似乎对字符串排序不正确
- 多维数组按字符串排序,而不是按值排序