【问题标题】:Ignore non-numeric characters in numbers for DataTables sort忽略数字中的非数字字符以进行 DataTables 排序
【发布时间】:2016-10-28 18:57:49
【问题描述】:

我正在为 DataTables 创建一个自定义排序插件,它将对包含非数字行的数字列进行排序。我得到了将“N/A”行放在底部的部分,但似乎无法弄清楚如何让它忽略数字中的逗号。

例如:

$12,443.00
362,123,231
不适用
不适用

34,242.42
23,234

下面的代码设法忽略了除了数字中的逗号之外的所有内容。

代码:

function numeric_sort(a, b, high) {
    var reg = /[+-]?((\d+(\.\d*)?)|\.\d+)([eE][+-]?[0-9]+)?/;
    a = a.match(reg);
    a = a !== null ? parseFloat(a[0]) : high;
    b = b.match(reg);
    b = b !== null ? parseFloat(b[0]) : high;
    return ((a < b) ? -1 : ((a > b) ? 1 : 0));
}

jQuery.extend( jQuery.fn.dataTableExt.oSort, {
    "numeric-empty-bottom-asc": function (a, b) {
        return numeric_sort(a, b, Number.POSITIVE_INFINITY);
    },
    "numeric-empty-bottom-desc": function (a, b) {
        return numeric_sort(a, b, Number.NEGATIVE_INFINITY) * -1;
    }
} );

我的代码来自:http://jsfiddle.net/6qmkY/

任何帮助将不胜感激。

【问题讨论】:

标签: datatables datatables-1.10


【解决方案1】:

您可以只使用replace() 删除逗号。

function sortNumbersIgnoreText(a, b, high) {
    var reg = /[+-]?((\d+(\.\d*)?)|\.\d+)([eE][+-]?[0-9]+)?/;    
    a = a.replace(/,/g, '');
    a = a.match(reg);      
    a = a !== null ? parseFloat(a[0]) : high;
    b = b.replace(/,/g, '');
    b = b.match(reg);    
    b = b !== null ? parseFloat(b[0]) : high;
    return ((a < b) ? -1 : ((a > b) ? 1 : 0));    
}

有关代码和演示,请参阅updated jsFiddle

【讨论】:

  • a.replace(',', '');只替换了第一个逗号。使用 a.replace(/[, ]+/g, "").trim();相反,它取代了所有的逗号。感谢您的帮助。
  • @KumaranS,你完全正确,更正了代码。
【解决方案2】:

您可以替换所有非数字字符,包括逗号(不包括小数点)。

function sortNumbersIgnoreText(a, b, high) {
    a = a.replace(/[^0-9\.]+/g, '');
    a = (a !== null && a !== '') ? parseFloat(a) : high;
    b = b.replace(/[^0-9\.]+/g, '');
    b = (b !== null && b !== '') ? parseFloat(b) : high;
    return ((a < b) ? -1 : ((a > b) ? 1 : 0));    
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-05
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    相关资源
    最近更新 更多