2017-11-12 7 views
2

私は文字列/配列を辞書順にソートしていました。
array.sortを使用して "022"を含む文字列をソートしなければならない場合がありました。なぜ私はそれが印刷されているときに「18」に等しいとは分かりません。javascriptのinbuiltソートメソッドを使用して間違った並べ替えの回答につながる先行ゼロ

var l = [022,12]; 
l.sort(); 
(2) [12, 18] => output 

これの背後にある理由とその修正方法はなんですか?

+4

'022'があります8進数のリテラル== 18桁の小数点以下桁数 – Aprillion

答えて

0

これは種類に固有のものではありません。コンソールに022と入力すると、18が戻ってきます。これは、0239がDecimalLiteralの代わりにOctalIntegerLiteralと解釈されているためです。しかし、必ずしもそうではありません。 documentationを見てとる:小数リテラルがゼロで開始することができることが

注(0)別の進数字が続くが、先頭の0の後に、すべての桁が8未満である場合、数として解釈され8進数。これはJavaScriptでスローされません。bug 957513を参照してください。 parseInt()についてのページも参照してください。

EDIT:有数の0を削除し、10進整数として022を解釈し、あなたがparseIntを使用してベースを指定することができますするには、次の

parseInt("022", 10); 
> 22 
+0

リファレンスリンクの速さはどうですか?これまで仕様を読んだことがありますか? –

+0

したがって、parseInt(配列)がこの問題を解決すると言っていますか? –

+0

@HimanshuBhutani編集を確認してください。文字列 "022"を10進数の整数22として解釈するには、基数10を指定する必要があります。 – stybl

関連する問題