Как отсортировать столбцы даты с пустыми ячейками - PullRequest
0 голосов
/ 22 марта 2012

Я использую скрипт sorttable.js, найденный в http://www.kryogenix.org/code/browser/sorttable/

Одна проблема, с которой я сталкиваюсь, заключается в том, что сортировка не работает для моих столбцов дат, которые содержат смесь пустых ячеек и дат. Мои даты в формате "ММ / ДД / ГГГГ".

Из того, что я вижу, сортировка происходит здесь в сценарии:

sort_mmdd: function(a,b) {
    mtch = a[0].match(sorttable.DATE_RE);
    y = mtch[3]; d = mtch[2]; m = mtch[1];
    if (m.length == 1) m = '0'+m;
    if (d.length == 1) d = '0'+d;
    dt1 = y+m+d;
    mtch = b[0].match(sorttable.DATE_RE);
    y = mtch[3]; d = mtch[2]; m = mtch[1];
    if (m.length == 1) m = '0'+m;
    if (d.length == 1) d = '0'+d;
    dt2 = y+m+d;
    if (dt1==dt2) return 0;
    if (dt1<dt2) return -1;
    return 1;
  }  

Что я не могу понять, так это как сделать так, чтобы пустые ячейки проходили все вверх или вниз при сортировке по столбцу.

Любые идеи о том, как я могу сделать это?

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Ну, вы могли бы вернуть массив, когда нет совпадений, которые находятся далеко или в будущем ...

mtch = a[0].match(sorttable.DATE_RE)|| ['nomatch','01','01','9000'];
0 голосов
/ 22 марта 2012

Я выяснил, как заставить даты работать вместе с пустыми ячейками (см. Ниже).

В конечном итоге протестировал «mtch», прежде чем использовать его позже ...

sort_mmdd: function(a,b) {

    mtch = a[0].match(sorttable.DATE_RE);

    if ((mtch == null) || (mtch == undefined)) {
        y = 0; d = 0; m = 0;
    }
    else {
        y = mtch[3]; d = mtch[2]; m = mtch[1];
    }

    if (m.length == 1) m = '0'+m;
    if (d.length == 1) d = '0'+d;
    dt1 = y+m+d;

    mtch = b[0].match(sorttable.DATE_RE);

    if ((mtch == null) || (mtch == undefined)) {
        y = 0; d = 0; m = 0;
    }
    else {
        y = mtch[3]; d = mtch[2]; m = mtch[1];
    }

    if (m.length == 1) m = '0'+m;
    if (d.length == 1) d = '0'+d;
    dt2 = y+m+d;
    if (dt1==dt2) return 0;
    if (dt1<dt2) return -1;
    return 1;
}
...