6

次のように、英数字項目の配列をソートする必要があります。から:

2 xxx
20 axxx
38 xxxx
20 bx
8540 xxxxxx

に:

8540 xxxxx
38 xxxx
20 axxx
20 bx
2 xxx

したがって、数字に関して降順でソートされ、次にアルファベット順に昇順でソートされます。数字は常に 1 つのスペースでアルファベット文字 (「xxxx」で示される) から区切られますが、数字は可変長です。

sort() 関数で正規表現を使用し、数字をスペースで分割してから並べ替える必要があると思われますが、アルファベット順の並べ替えに結び付ける方法がわかりません。コードサンプルはありますか? 本当にありがとう!

4

2 に答える 2

6

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);
于 2013-06-10T03:25:16.703 に答える
4

このようなものが動作します:

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/

于 2013-06-10T03:28:42.580 に答える