[英]Javascript - Sort Letter Number Combination
我有字母和数字的组合。 例如:2E12,1Z10,3D13,3D03,FB14,X002等。
我尝试了一些方法来对这些字符串进行排序,但似乎没有任何工作。 parseInt在丛中工作,但整个数组从不排序(它是一个json数组),如果第二次运行排序,则会出现不同的结果。
我也尝试使用正则表达式用数字替换所有字母,但这会产生逻辑错误。 每次更换字符串中间的大字母时,它会将数字增加10或20倍。例如,1Z10将创建12610,即使它以1开头并且应该向顶部排序。
有谁知道如何排序这些字符串? 如果字母是第一个或数字是第一个并不重要,只要我可以摆脱随机的问题。
提前致谢!
如果你想要数字序列进行排序,好像它们是数字,在alphas之前排序,以便在2之后排序100,你需要所谓的自然排序 -
这是一个例子,谷歌会发现更多。
// case insensitive, digits to number interpolation
function natSort(as, bs){
var a, b, a1, b1, i= 0, L, rx= /(\d+)|(\D+)/g, rd= /\d/;
if(isFinite(as) && isFinite(bs)) return as - bs;
a= String(as).toLowerCase();
b= String(bs).toLowerCase();
if(a=== b) return 0;
if(!(rd.test(a) && rd.test(b))) return a> b? 1: -1;
a= a.match(rx);
b= b.match(rx);
L= a.length> b.length? b.length: a.length;
while(i < L){
a1= a[i];
b1= b[i++];
if(a1!== b1){
if(isFinite(a1) && isFinite(b1)){
if(a1.charAt(0)=== "0") a1= "." + a1;
if(b1.charAt(0)=== "0") b1= "." + b1;
return a1 - b1;
}
else return a1> b1? 1: -1;
}
}
return a.length - b.length;
}
var s ='2E12,1Z10,1z2,3D13,3D03,FB14,X002'.split(',');
s.sort(natSort)
/* returned value: (Array)
1z2,1Z10,2E12,3D03,3D13,FB14,X002
*/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.