Проблема в том, что вы сортируете числа в виде строк. Вы делаете это:
arr = [ 1, 5, 10, 12, 18, 2, 3, 33, 4];
arr.sort((a,b) => {
return a.toString().localeCompare(b.toString());
});
//[ 1, 10, 12, 18, 2, 3, 33, 4, 5 ]
и вы должны сделать что-то вроде:
arr.sort((a,b) => {
return a>b;
});
//[ 1, 2, 3, 4, 5, 10, 12, 18, 33 ]
Таким образом, вы можете привести $(whatever).text()
к int, добавив + как +$(whatever).text()
или используя parseInt()
если это числа $('td:eq(' + column + ')', a).text()
, вы можете выполнить что-то вроде:
function sortTable(table, column, order) {
var asc = order === 'asc';
var tbody = table.find('tbody');
tbody.find('tr').sort(function (a, b) {
if (asc) {
return parseInt($('td:eq(' + column + ')', a).text())>parseInt($('td:eq(' + column + ')', b).text());
} else {
return parseInt($('td:eq(' + column + ')', b).text())
<parseInt($('td:eq(' + column + ')', a).text());
}
}).appendTo(tbody);
}