我查看了为tablesorter列出的所有答案,但无法找到我正在寻找的内容。
我有一个表,我正在尝试排序,一列包含产品型号,包括字母和数字,问题是它按字母顺序排序,但不按正确顺序排列。例如,排序列如下所示:
STRB 18, STRB 19, STRB 2, STRB 20, STRB 23 - 你明白了。
我已经收集到我需要这个列按自然顺序排序,但是我没有任何js chops来做这个。如果有人能指出我正确的方向,我将非常感激!
答案 0 :(得分:3)
取自我的一些旧代码
compare = {
natural: function(a, b) {
function prepare(s) {
var q = [];
s.replace(/(\D)|(\d+)/g, function($0, $1, $2) {
q.push($1 ? 1 : 2);
q.push($1 ? $1.charCodeAt(0) : Number($2) + 1)
});
q.push(0);
return q;
}
var aa = prepare(a), bb = prepare(b), i = 0;
do {
if(aa[i] != bb[i])
return aa[i] - bb[i];
} while(aa[i++] > 0);
return 0;
}
}
使用示例
test = ['img100b', 'img21', 'img18', 'img100a', 'img1', 'img2']
console.log(test.sort(compare.natural))
答案 1 :(得分:3)
答案 2 :(得分:-2)
不确定“natrual”命令的含义,但我猜你的意思是strb 2将在strb 18之前。
您上面的顺序对于字符串是正确的。如果你想按数字部分排序(假设所有的strb总是相同的)你将不得不做一个子字符串来获取数字,然后对数据进行排序。
我也不会在javascript中这样做。让您的数据库为您工作,让它处理数据的顺序。它会为你节省很多痛苦。