我使用下面的代碼排序考慮的情況下考慮
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時使代碼正常工作?
我使用下面的代碼排序考慮的情況下考慮
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時使代碼正常工作?
如果您正在尋找不區分大小寫的排序,最簡單的方法是將雙方轉換爲全部或全部大小寫。
// 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;
}
感謝您的快速回答。我應該使用toLocaleLowerCase()而不是toLowerCase(),因爲有人使用非英文字母? –
另外如果我必須做一個區分大小寫的排序? –
@TomHodder:使用語言環境版本可能有意義。回到上面的問題問題,你已經有*的版本是*區分大小寫。 –
採取了一個在一個ASCII表,這應該給你一些線索,爲什麼會發生這種情況。您可以在比較它們之前通過降低(或者上限)數值來「糾正」行爲...... –
您是否正在尋找不區分大小寫的類型,如果您希望大寫變體出現在較低的案例變體,反之亦然。 – crush