Корректная сортировка в 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>