1. ホーム
  2. javascript

[解決済み] Array.sort()で数字を正しく並べ替えるには?重複

2022-08-05 04:42:13

質問

複数のブラウザで、以下のコードでは数値が正しくソートされません。

a = new Array();
a.push(10);
a.push(60);
a.push(20);
a.push(30);
a.push(100);
document.write(a.sort())

これは 10,100,20,30,60 .

誰か理由を知っていますか?

どのように解決するのですか?

<ブロッククオート

いろいろな数字を試してみましたが、いつも0がないかのように動作し、それ以外は正しくソートされます。どなたか理由をご存じですか?

辞書式ソート(例:オブジェクトを文字列に変換し、辞書順にソートする)になっています。これは、Javascriptのデフォルトのソート動作です。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort

array.sort([compareFunction])

パラメータ

比較関数

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

ECMAscript仕様(一般的なJavascriptの規範となるリファレンス)では ECMA-262, 3rd ed. のセクション 15.4.4.11 では、デフォルトのソート順は辞書式ですが、彼らはそれを明言せず、代わりに与えられた比較関数を必要に応じて呼び出し、それ以外は文字列に変換されたときに引数を比較する概念的なソート関数の手順を与えています。

13. If the argument comparefn is undefined, go to step 16.
14. Call comparefn with arguments x and y.
15. Return Result(14).
16. Call ToString(x).
17. Call ToString(y).
18. If Result(16) < Result(17), return −1.
19. If Result(16) > Result(17), return 1.
20. Return +0.