jquery Tablesorter - естественный порядок сортировки? - PullRequest
2 голосов
/ 23 июня 2011

Я просмотрел все ответы, перечисленные для TableSorter, но не могу найти то, что я ищу.

У меня есть таблица, которую я пытаюсь отсортировать, один столбец содержит номера моделей продуктов, которые включают как буквы, так и цифры, проблема в том, что они сортируются по алфавиту, но не по номерам в правильном порядке. Например, отсортированный столбец выглядит так:

STRB 18, STRB 19, STRB 2, STRB 20, STRB 23 - вы поняли.

Я понял, что мне нужен этот столбец для сортировки в естественном порядке, но у меня нет js отбросов, чтобы сделать это. Если бы кто-нибудь мог указать мне правильное направление, я был бы очень благодарен!

Ответы [ 3 ]

3 голосов
/ 23 июня 2011

взято из моего старого кода

compare = {
    natural: function(a, b) {
        function prepare(s) {
            var q = [];
            s.replace(/(\D)|(\d+)/g, function($0, $1, $2) {
                q.push($1 ? 1 : 2);
                q.push($1 ? $1.charCodeAt(0) : Number($2) + 1)
            });
            q.push(0);
            return q;
        }
        var aa = prepare(a), bb = prepare(b), i = 0;
        do {
            if(aa[i] != bb[i])
                return aa[i] - bb[i];
        } while(aa[i++] > 0);
        return 0;
    }
}

пример использования

test = ['img100b', 'img21', 'img18', 'img100a', 'img1', 'img2']
console.log(test.sort(compare.natural))
3 голосов
/ 23 июня 2011

Плагин jquery tablesorter предлагает возможность написать свой собственный парсер.

Посмотрите на пример и попробуйте!

http://tablesorter.com/docs/example-parsers.html

0 голосов
/ 23 июня 2011

Не уверен, что вы подразумеваете под порядком "natrual", но я предполагаю, что вы имеете в виду, что strb 2 будет раньше, чем strb 18.

Порядок, указанный выше, верен для строк.если вы хотите отсортировать по числовой части (при условии, что все strb всегда одинаковы), вам нужно будет сделать подстроку, чтобы получить только число, а затем отсортировать данные.

Я бы также НЕ делал этого вJavaScript.Пусть ваша база данных будет работать на вас, и пусть она обрабатывает порядок данных.Это избавит вас от боли.

...