2016-10-28 3 views
1

Я создаю настраиваемый плагин sort для DataTables, который будет сортировать числовые столбцы, которые также содержат нечисловые строки. Я получил часть, где он помещает строки «N/A» внизу, но, похоже, не может понять, как заставить его игнорировать запятые в числах.Игнорировать нечисловые символы в числах для DataTables sort

Например:

$ 12,443.00
362.123.231
N/A
N/A
нуль
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/

Любая помощь будет оценена.

+0

Пожалуйста, сделайте запрос на тяну, если вы найдете некоторые полезные исправления к исходному плагину https://github.com/davidkonrad/datatables-sort-numbers-ignore-text – davidkonrad

ответ

0

Вы можете использовать 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 для кода и демонстрации.

+0

a.replace (',', ''); только заменил первую запятую. Используется a.replace (/ [,] +/g, "") .trim(); вместо этого он заменил все запятые. Спасибо за вашу помощь. –

+0

@KumaranS, вы абсолютно правы, исправил код. –

-1

Вы можете заменить все нецифровые символы, включая запятые (исключая десятичную).

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));  
} 
Смежные вопросы