2014-10-03 3 views
2

Я использую tablesorter для сортировки набора значений, форматы которых варьируются от таких вещей, как 710,231 до 6.39 million, 37.3 million, 5.3 million и т. Д. В настоящее время плагин сортирует просто игнорирует million и в других отношениях отлично, но, следовательно, вы получаете что-то вроде «5.3 миллионов, 6.39 миллионов, 37.3 миллионов, 710,231,Сортировка «человеческих» чисел в tablesorter

+0

Если TableSorter является конкретный плагин или библиотеку, вы должны быть более конкретными, и, вероятно, сделать ссылку на документацию. Кроме того, задайте вопрос. Если вы не зададите вопрос, вы не можете получить ответ. –

+0

Другими словами, tablesorter работает правильно, это грязные данные. –

+0

Основываясь на том, что вы сказали, вероятно, просто используется * parseFloat *. Сначала вам нужна функция, которая преобразует «человеческие» цифры в реальные числа (например, от 6,3 до 6300 000), тогда вы можете отсортировать их по своему усмотрению. – RobG

ответ

0

Вам нужно будет добавить парсер, чтобы заменить имена своими значение (demo):

// see big list here: http://www.unc.edu/~rowlett/units/large.html 
var numbers = { 
    'zero'  : 0, 
    'hundred'  : 100, 
    'thousand' : 1e3, 
    'million'  : 1e6, 
    'billion'  : 1e9, 
    'trillion' : 1e12, 
    'quadrillion' : 1e15, 
    'quintillion' : 1e18, 
    'sextillion' : 1e21, 
    'septillion' : 1e24, 
    'octillion' : 1e27, 
    'nonillion' : 1e30, 
    'decillion' : 1e33 
}; 

$.tablesorter.addParser({ 
    id: "namedNumbers", 
    is: function() { 
     return false; 
    }, 
    format: function (s, table) { 
     var v, 
      result = 1, 
      arry = (s || '').split(/[\-\s]+/), 
      len = arry.length; 
     while (len) { 
      v = $.tablesorter.formatFloat((arry[--len] || '').toLowerCase(), table); 
      if (numbers.hasOwnProperty(v)) { 
       result *= numbers[v]; 
      } else { 
       result *= parseFloat(v); 
      } 
     } 
     return result !== 1 ? result : s; 
    }, 
    type: "numeric" 
}); 

$(function() { 
    $('table').tablesorter({ 
     theme: 'blue', 
     headers : { 
      1 : { sorter : 'namedNumbers' } 
     } 
    }); 
}); 
Смежные вопросы