按降序排序字母数字字符串

Sort Alphanumeric String Descending

本文关键字:数字 数字字符 字符串 降序 排序      更新时间:2023-09-26

我需要按如下方式对字母数字项数组进行排序。来自:

2 xxx
20 axxx
38 xxxx
20 bx
8540 xxxxxx

:

8540 xxxxx
38 xxxx
20 axxx
20 bx
2 xxx

因此,按数字降序排序,然后按字母顺序升序排序。数字与字母字符(表示"xxxx")之间总是用一个空格隔开,但数字的长度是可变的。

我怀疑我需要在sort()函数中使用一些正则表达式,并通过空间拆分数字,然后对其进行排序,但我不知道如何按字母顺序排序。有代码示例吗?非常感谢!

不需要RegEx,因为Array.sort()接受定制函数:

http://jsfiddle.net/EFGK9/

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);

可以这样做:

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]);
});

演示:http://jsfiddle.net/KLa2J/