2014-01-31 75 views
0

我使用下面的代碼排序考慮的情況下考慮

function asc(a, b) { 
     return ($(b).text()) < ($(a).text()); 
    } 

當我通過,d,C,E,B我得到正確的值A,B,C,d,E

但是,當我通過a,d,C,e,b時,我得到C,a,b,d,e

如何在使用不同Case時使代碼正常工作?

+0

採取了一個在一個ASCII表,這應該給你一些線索,爲什麼會發生這種情況。您可以在比較它們之前通過降低(或者上限)數值來「糾正」行爲...... –

+1

您是否正在尋找不區分大小寫的類型,如果您希望大寫變體出現在較低的案例變體,反之亦然。 – crush

回答

5

如果您正在尋找不區分大小寫的排序,最簡單的方法是將雙方轉換爲全部或全部大小寫。

// Note: Not for Array#sort 
function asc(a, b) { 
    return $(b).text().toLowerCase() < $(a).text().toLowerCase(); 
} 

注意,思維,那我假設你使用這種與Array#sort,因爲它不會做什麼Array#sort預計(返回0<0,或>0)。


附註:在你的周圍引用代碼$(b).text()$(a).text()()有任何作用,我已經刪除它們上面。


從您的評論:

如果我要序列中的例如「C」後的「C」,我將如何做呢?

啊,現在不一樣了。這適用於Array#sort,你就必須修改它以匹配但是你使用asc(我不知道你希望在字符串匹配的情況下做什麼):Live Copy

// Note: Designed for Array#sort, may need modifying 
function asc(a, b) { 
    var btext = $(b).text(), 
     atext = $(a).text(), 
     blc, 
     alc; 

    if (atext === btext) { 
     // Same 
     return 0; 
    } 
    alc = atext.toLowerCase(); 
    blc = btext.toLowerCase(); 
    if (alc === blc) { 
     // Case-insensitive match, compare case-sensitive and 
     // ensure uppercase comes after lowercase. 
     return atext < btext ? 1 : -1; 
    } 

    // Different even ignoring case 
    return alc < blc ? -1 : 1; 
} 
+0

感謝您的快速回答。我應該使用toLocaleLowerCase()而不是toLowerCase(),因爲有人使用非英文字母? –

+0

另外如果我必須做一個區分大小寫的排序? –

+0

@TomHodder:使用語言環境版本可能有意義。回到上面的問題問題,你已經有*的版本是*區分大小寫。 –