Jquery Datatables - 数字列按字符串排序

3

我有一个数据表:

var dataTable = $('#statistics-table').DataTable({
    paging: false,
    searching: false,
    info: false,
    order: [[2, "desc"]],
    columns: [
        {
            title: "Bid Price",
            data: "Bid"
        },
        {
            title: "Ask Price",
            data: "Ask"
        },
        {
            title: "Profit",
            data: {
                _: "Profit.display",
                sort: "Profit.sort"
            }
        }
    ]
});

问题在于利润列被排序为字符串:查看 这里是我设置属性的地方。一个用于用户视图,另一个用于排序(遵循此处的示例here)。
rows.every(function () {
        var data = this.data();
        var minimalAsk = formatNumber(lowestValuesByCurrency[currency].Ask);
        if (data.Ask !== minimalAsk) {
            var profit = formatNumber(data.Bid - minimalAsk);
            var profitPercent = formatNumber((profit / minimalAsk) * 100);

            if (profit > 0) {
                data.Profit.display = `<strong class="increasing">+${profit} (+${profitPercent}‰)</strong>`;
            } else {
                data.Profit.display = `<strong class="decreasing">${profit} (${profitPercent}‰)</strong>`;
            }

            data.Profit.sort = Number(profit);
        } else {
            data.Profit.display = "Most cheap Ask";
            data.Profit.sort = 0;
        }

        this.data(data);
    });

dataTable.draw();

在我进行调试时,我可以看到Profit.sort是一个数字而不是字符串(证明)。为什么它还在像字符串一样排序呢?


4
请在您的“利润列定义”中尝试添加“type:'num'”。 - davidkonrad
这个运行得非常完美,非常感谢! - Reath
@davidkonrad 我会用你的评论来回答这个问题。它也帮助了我。 - atw
@davidkonrad 哥们儿!你的评论帮了我大忙。非常感谢你节省了我的时间。把它作为答案吧! - tom
1个回答

2

将@davidkonrad的评论转换为答案

在客户端处理模式下,将列的type明确定义为num将强制执行数字排序。

columnDefs中:

$('#example').dataTable( {
  "columnDefs": [
    { "type": "num", "targets": 0 }
  ]
} );

或者以 的形式呈现:
$('#example').dataTable( {
  "columns": [
    { "type": "html" },
    null,
    null,
    null,
    null
  ]
} );

以下是来自https://datatables.net/reference/option/columns.type的示例和参考资料:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接