数据表通过解析其值对一列进行排序

Datatables ordering one column by parsing its value

有人可以帮我订购我的 table 格式 (number/year) 文档,这些文档存储在一栏中吗?首先,我需要按年份排序,然后按数字排序(意味着从最新文档到最旧文档以及从最旧文档到最新文档的倒序)

输入数据:

1/15
3/15
4/12
41/12
30/12
30/110
21/02
128/02

订购数据:

30/110
3/15
1/15
41/12
30/12
4/12
128/02
21/02

首先,我想制作双倍 (year.number) 并比较它们,但它会很糟糕地排序,例如。数据如 4/12、30/12 因为 (12.30 < 12.4)

我创建了fiddlehttp://jsfiddle.net/N3ckS/64/

谢谢你

与其将各个值解析为单个值进行比较(例如像您建议的双精度值),不如像开始时描述的那样逐步比较两个值:

比较年份:如果不同,说明已经给出了两个元素的绝对顺序;如果相同,则仅按单据编号排序。

您还没有将年份和文档编号的值解析为数字,导致将它们作为字符串进行比较。

function compare_x_y (x, y) {
    var xx = x.split('/');
    var x_year = parseInt(xx[1], 10);
    var x_number = parseInt(xx[0], 10);
    var yy = y.split('/');
    var y_year = parseInt(yy[1], 10);
    var y_number = parseInt(yy[0], 10);
    var year_equals = x_year == y_year;

    return year_equals ? x_number < y_number : x_year < y_year;
}

jQuery.fn.dataTableExt.oSort["document-desc"] = function (x, y) {
        return compare_x_y (x, y) ? 0 : 1;
};

jQuery.fn.dataTableExt.oSort["document-asc"] = function (x, y) {
        return compare_x_y (x, y) ? 1 : 0;        
};

这里是updated fiddle