对数据表中的字母数字列进行排序确实起作用

时间:2018-08-13 10:17:48

标签: sorting datatables alphanumeric

我在对jquery数据表中的列进行排序时遇到一些问题。

我想对第一列进行升序/降序排序。

这是列中的一些数据(默认按desc排序):

R949
R923
R909
R594
R559
R1017

您会看到默认的排序算法不适用于字母数字字符。

这是我的设置

$('#myTable').dataTable({
            "aaSorting": [[0, "desc"]],
            "paging": false,
            "lengthChange": false,
            "searching": true,
            "ordering": true,
            "info": true,
            "autoWidth": false
)}

我的愿望下降结果:

R1017
R949
R923
R909
R594
R559

有人暗示我做错了什么吗?我也尝试使用

"columnDefs": [
{"type": "natural", "targets": 0 }]

但这也不起作用

1 个答案:

答案 0 :(得分:0)

您正在使用的字符串将被计算:

R0xxxxx

您需要进行自然排序:

function naturalSort(a, b) {
        var ax = [], bx = [];

        a.replace(/(\d+)|(\D+)/g, function(_, $1, $2) { ax.push([$1 || Infinity, $2 || ""]) });
        b.replace(/(\d+)|(\D+)/g, function(_, $1, $2) { bx.push([$1 || Infinity, $2 || ""]) });
        
        while(ax.length && bx.length) {
            var an = ax.shift();
            var bn = bx.shift();
            var nn = (an[0] - bn[0]) || an[1].localeCompare(bn[1]);
            if(nn) return nn;
        }

        return ax.length - bx.length;
    }

    test = [
    "R12",
    "R10",
    "R2",
    "R1",
    "R101",
    "R101",
    "R10"
];

    test.sort(naturalSort);
    document.write("<pre>" + JSON.stringify(test,0,3));