JavaScript排序方法处理大写字母

时间:2014-02-11 11:37:58

标签: javascript

使用JavaScript的sort()方法注意到一些奇怪的东西。给出以下数组:

var arr = ['Aaa',
'CUSTREF',
'Copy a template',
'Copy of Statementsmm',
'Copy1 of Default Email Template',
'Copy11',
'Cust',
'Statements',
'zzzz'];

对此阵列调用排序:

console.log(arr.sort());

收率:

["Aaa", "CUSTREF", "Copy a template", "Copy of Statementsmm", "Copy1 of Default Email Template", "Copy11", "Cust", "Statements", "zzzz"] 

这是对的吗?即。首先列出CUSTREF,这是因为它是大写字母吗?

5 个答案:

答案 0 :(得分:10)

这是正确的。使用字符本身的序数值以二进制方式对字符串进行排序。

对于不区分大小写的排序,请尝试以下方法:

arr.sort(function(a,b) {
    a = a.toLowerCase();
    b = b.toLowerCase();
    if( a == b) return 0;
    return a < b ? -1 : 1;
});

答案 1 :(得分:5)

你是对的,这是因为大写字母。如果要排序可能具有非ASCII字符的字符串,例如ä和ö,则应使用String.localeCompare()。这也解决了大写字母问题。

arr.sort(function (a, b) {
    return a.localeCompare(b);
});

答案 2 :(得分:1)

是, 它具有更高的Unicode值。 (它=&#39; U&#39;在第一个单词中)

你可以更好地使用

.sort(function(a,b) { return (a.toLowerCase() < b.toLowerCase()) ? -1 : 1;});

答案 3 :(得分:0)

如果你看一下角色编码的方式(例如ASCII表),你会看到,大写字母的值较低,小写一个,所以是 - 这是因为大写字母

答案 4 :(得分:0)

由于U(U + 0055)的Unicode值小于o(U + 006F),因此区分大小写的sort始终会U放置o {1}}。对于不区分大小写的sort,您应该尝试:

arr.sort(
    function(a, b){
        if (a.toLowerCase() < b.toLowerCase()) return -1;
        if (a.toLowerCase() > b.toLowerCase()) return 1;
        return 0;
    }
);