2014-01-31 3 views
0

Я использую следующий кодСортировка принимая случай во внимание

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

Когда я прохожу, д, с, е, б я получаю правильные значения а, б, в, д, е

Однако, когда я передаю a, d, C, e, b, я получаю C, a, b, d, e

Как я могу заставить код работать, когда используется другой случай?

+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» после «с» в примере, как будет я это сделать?

Ах, теперь все по-другому. Это работает для 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: Использование языковой версии может иметь смысл. Повторите свой вопрос, указанный выше, версия, которую вы уже имеете *, - это регистр, чувствительный к регистру. –

Смежные вопросы