我需要按如下方式对字母数字项数组进行排序。发自:
2 xxx
20 axxx
38 xxxx
20 bx
8540 xxxxxx至:
8540 xxxxx
38 xxxx
20 axxx
20 bx
2 xxx因此,按数字降序排序,然后按字母顺序升序。数字始终与字母字符(表示为"xxxx")之间用一个空格分隔,但数字的长度是可变的。
我怀疑我需要在sort()函数中使用一些正则表达式,按空格拆分数字,然后对其进行排序,但我不知道如何按字母顺序进行排序。有代码样本吗?非常感谢!
发布于 2013-06-10 11:25:17
不需要RegEx,因为Array.sort()接受自定义函数:
var arr=["2 xxx","20 axxx","38 xxxx","20 bx","8540 xxxxxx"];
arr.sort(function(a,b){
a=a.split(" ");
b=b.split(" ");
var an=parseInt(a[0],10);
var bn=parseInt(b[0],10);
return an<bn?1:(an>bn?-1:(a[1]<b[1]?-1:(a[1]>b[1]?1:0)));
});
console.log(arr);发布于 2013-06-10 11:28:43
像这样的东西将会起作用:
var arr = [
"2 xxx",
"20 axxx",
"38 xxxx",
"20 bx",
"8540 xxxxxx"
];
arr.sort(function(a, b) {
var aParts = a.split(" "),
bParts = b.split(" "),
aNum = +aParts[0], // convert numeric parts
bNum = +bParts[0]; // to actual numbers
if (aNum > bNum)
return -1;
else if (aNum < bNum)
return 1;
else
return aParts[1].localeCompare(bParts[1]);
});https://stackoverflow.com/questions/17016427
复制相似问题