簡體   English   中英

JavaScript的大寫字母排序方法處理

[英]JavaScript's sort method handling of capital letters

使用JavaScript的sort()方法注意到一些奇怪的東西。 給出以下數組:

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

在此數組上調用sort:

console.log(arr.sort());

產量:

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

它是否正確? 即。 CUSTREF首先列出,這是因為它的大寫字母?

那是正確的。 使用字符本身的序數值以二進制方式對字符串進行排序。

對於不區分大小寫的排序,請嘗試以下操作:

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

你是對的,這是因為大寫字母。 如果要排序可能具有非ASCII字符的字符串,例如ä和ö,則應使用String.localeCompare() 這也解決了大寫字母問題。

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

是的,它具有更高的Unicode值。 (它=第一個單詞中的'U')

你可能會更好用

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

如果你看一下他們對字符進行編碼的方式(例如ASCII表),你會看到,大寫字母的值較低,小寫一個,所以是 - 這是因為大寫字母

由於U (U + 0055)的Unicode值小於o (U + 006F),因此區分大小寫的sort將始終將U置於o之前。 對於不區分大小寫的sort ,您應該嘗試:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM