5

したがって、値をアルファベット順に並べ替えるように設計された並べ替えメソッドがあり、ほとんどすべての場合にうまく機能します。

function alphabetical(name1, name2):int { 
        if (name1 < name2){ 
            return -1; 
        } else if (name1 > name2){ 
            return 1; 
        }else { 
            return 0; 
        };
    };

問題は、タイトルに数字が含まれている場合です。

例えば:

['abc 8','abc 1','abc 10']

並べ替えます

['abc 1','abc 10','abc 8']

しかし、私が行う必要があるのは、アルファベット順にソートすることですが、数値に遭遇すると数値が考慮されるため、ソートが返されます

['abc 1','abc 8'.'abc 10']

これを行うために構築された何らかの既存の正規表現またはアルゴリズムが存在することを望んでいましたが、何を検索すればよいかまったくわかりません。並べ替えの検索はすべて、アルファベット順または数値順のいずれかで行われます。両方ではありません。

本当にありがとう!

4

1 に答える 1

4

AS3: Sort mixed alpha/numeric arrayに変換される JavaScript ソリューションを見つけました。

解決策は次のようになります。

var reA = /[^a-zA-Z]/g;
var reN = /[^0-9]/g;
function sortAlphaNum(a,b) {
    var aA = a.replace(reA, "");
    var bA = b.replace(reA, "");
    if(aA === bA) {
        var aN = parseInt(a.replace(reN, ""), 10);
        var bN = parseInt(b.replace(reN, ""), 10);
        return aN === bN ? 0 : aN > bN ? 1 : -1;
    } else {
        return aA > bA ? 1 : -1;
    }
}

var arr = ['abc 8','abc 1','abc 10'];
arr.sort(sortAlphaNum);

trace(arr); // abc 1,abc 8,abc 10
于 2013-04-17T18:40:38.907 に答える