0

多次元配列をソートしようとしています。javascript .sort() 関数のコールバックに何を付ければ、mysql order by のように動作させることができますか?

例。mysql order by を使用すると、次の結果が得られます。

acx, 
acx abx,
acx acx,
S&P/ASX 20

js で sort 関数を使用すると、次の結果が得られます。

S&P/ASX 20,
acx, 
acx abx,
acx acx

ありがとうございました。

4

2 に答える 2

2

問題は、JS での並べ替えでは大文字と小文字が区別されることです。これを回避するには、関数を引数として に提供しますsort。これは、文字列の大文字 (または小文字) バージョンを比較する必要があります。

function cmp(x, y) {
    return x > y ? 1 : x < y ? -1 : 0;
}

a = ["S&P/ASX 20","acx", "acx abx","acx acx"]

a.sort(function(x, y) {
    return cmp(x.toUpperCase(), y.toUpperCase())
})
于 2013-03-26T07:10:28.123 に答える
0

複数のディメンションが何であるかは不明ですが、例は大文字と小文字を区別せずに並べ替えられているように見えます。

いずれにせよ、カスタム動作を取得するには、sort要素を比較して -1、1、または 0 を返す関数を渡します。たとえば、次のようになります。

yourArray.sort(function(a, b) {
    a = a.toLowerCase();
    b = b.toLowerCase();
    if (a < b) {
        return -1;
    }
    if (a > b) {
        return 1;
    }
    return 0;
});

配列の配列を比較する場合、比較関数内で、 と で指定した 2 つの配列のさまざまなエントリを比較しますab

于 2013-03-26T07:11:13.293 に答える