1

次の 2 次元配列を最初の列で降順で並べ替えようとしています。

wordsAndCount = [[0,"string"],[4,"string"],[31,"string"],[1,"string"],[3,"string"]];
wordsAndCount.sort();
wordsAndCount.reverse();

何らかの理由で、JavaScript は最初の列を整数ではなく文字列として扱い、次の出力を返します。

[4,"string"],[31,"string"],[3,"string"],[1,"string"],[0,"string"]

必要な出力が次の場合:

[31,"string"],[4,"string"],[3,"string"],[1,"string"],[0,"string"]

JSがそうする原因は何ですか?

4

2 に答える 2

7

JavaScriptは、最初の要素だけでなく、要素全体を文字列として扱います。

sort()、ソート関数を指定せずに、参照するtoString()各要素を呼び出します。toString()私が知っているすべてのJavaScriptエンジンで、あなたのような要素を呼び出すと、次のような値が得られます"[0,\"string\"]"

これを修正するには、独自のソーター関数を指定する必要があります。

wordsAndCount.sort(function (a, b) {
    return b[0] - a[0];
});

その場合も使用する必要はありませんreverse()

詳細については、のMDCドキュメントをsort()参照してください。

于 2013-01-08T19:42:58.443 に答える
1

JavaScriptが配列をソートすることをどのように期待していますか?ドキュメントから:

構文

array.sort([compareFunction])

パラメーター

compareFunctionソート順を定義する関数を指定します。省略した場合、配列は各要素の文字列変換に従って辞書式順序で(辞書順で)ソートされます。

その配列をソートする方法をJSに指示する必要があります。そうしないと、約束どおり、辞書式にソートされます(これは、ほぼ確実に、目的の配列ではありません)。

于 2013-01-08T19:43:12.557 に答える