Корректная сортировка в tablesorter

Есть колонка, в которой значения 2 000 Р, 100 Р, 1 500 Р и т.п.

При сортировке идут криво. Понятно, что дело в string типе. Не могу найти на сайте разработчика внятную инфу как сортировать такие строки. Может знает кто ?


Ответы (1 шт):

Автор решения: yar85

Не могу найти на сайте разработчика внятную инфу как сортировать такие строки.

Rly? Там в документации буквально сразу видно раздел "How to" и ссылку Custom sort script в нем.

Собственный компаратор указывается в объектном параметре textSorter конфига - где именем свойства является числовой индекс столбца таблицы, а значением функция:

generateTable();
const parseNumber = str => +(str.replace(/\D/g, ''));

$('table').tablesorter({
  textSorter: {
    1: (a, b) => parseNumber(a) - parseNumber(b),
  },
});





// все что ниже - неинтересная фигня, нужная только для демки.
function generateTable() {
  document.body.insertAdjacentHTML('afterBegin', `<table class="tablesorter">
    <thead>
      <tr><th>Foo</th><th>Bar</th></tr>
    </thead>
    <tbody></tbody>
  </table>`);
  const tBody = $('tbody').get(0);
  const rndNum = (max, min = 0) => Math.floor(min + Math.random() * (max - min));
  const rndStr = length => {
    const dict = 'abcdefghijklmnopqrstuvwxyz',
          dictSize = dict.length;
    return Array.from({ length }, () => dict.charAt(rndNum(dictSize))).join('');
  };
  for (let i = 0; i < 20; ++i) {
    const tr = tBody.insertRow();
    tr.insertCell().textContent = `${rndStr(8)} ${rndStr(5)}`;
    tr.insertCell().textContent = rndNum(1e5, 1e3).toLocaleString('ru-RU', {
      style: 'currency',
      maximumFractionDigits: 0,
      currency: 'RUB',
    });
  }
}
<link rel="stylesheet" href="https://unpkg.com/tablesorter/dist/css/theme.default.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://unpkg.com/tablesorter"></script>

→ Ссылка