[解決済み】Array#mapでparseIntがNaNになるのはなぜ?
2022-03-28 01:42:08
質問
から モジラデベロッパーネットワーク :
[1,4,9].map(Math.sqrt)
が得られます。
[1,2,3]
ではなぜ、こうなるのか。
['1','2','3'].map(parseInt)
これを降伏させる。
[1, NaN, NaN]
Firefox 3.0.1 と Chrome 0.3 でテストしました。免責事項として、これはクロスブラウザの機能ではない(IE はない)ことを承知しています。
以下のようにすると、目的の効果が得られることがわかりました。しかし、これではまだ
parseInt
.
['1','2','3'].map(function(i){return +i;}) // returns [1,2,3]
解決方法は?
のコールバック関数は
Array.map
には
三
というパラメータがあります。
同じ Mozillaのページ にリンクしています。
<ブロッククオートコールバックは、要素の値、要素のインデックス、トラバースされるArrayオブジェクトの3つの引数で呼び出されます。
そのため、ある関数を呼び出すと
parseInt
で、実際には
に
の引数を取ると、2番目の引数は要素のインデックスになります。
この場合、結局は
parseInt
を基数 0, 1, 2 で順番に指定します。 1はパラメータを供給していないのと同じなので、入力(この場合は基数10)に基づいてデフォルトで実行されました。 基数1はありえない数の基数ですし、基数2でも3は有効な数ではありません。
parseInt('1', 0); // OK - gives 1
parseInt('2', 1); // FAIL - 1 isn't a legal radix
parseInt('3', 2); // FAIL - 3 isn't legal in base 2
この場合、ラッパー関数が必要なんですね。
['1','2','3'].map(function(num) { return parseInt(num, 10); });
またはES2015+の構文で
['1','2','3'].map(num => parseInt(num, 10));
(どちらの場合にも
明示的に
に基数を指定します。
parseInt
というのも、そうしないと入力に基づいて基数を推測してしまうからです。古いブラウザでは、先頭に0をつけると8進数を推測してしまい、問題になることがありました。で始まる文字列は16進数を推測します。
0x
.)
関連
-
[解決済み】ETIMEDOUTエラーの対処方法は?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み] なぜ ++[[]][+[] +[+[]] は "10" という文字列を返すのでしょうか?
-
[解決済み] 新しい配列を作成せずに、既存のJavaScript配列を別の配列で拡張する方法
-
[解決済み] Javascriptの配列に、指定された値に等しい属性を持つオブジェクトが含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] parseInt(1/0, 19)はなぜ18を返すのですか?
-
[解決済み] 空文字列の場合、parseIntのNaNを0にする方法は?
-
[解決済み] parseInt(8,3) == NaN と parseInt(16,3) == 1 になっているのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】このエラーの原因は何ですか - "Fatal error: ローカルgruntを見つけることができません"
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み] jQueryで、ユーザーがそのフィールドを編集している間、テキストフィールドの最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み] Uncaught TypeError: 未定義のプロパティ 'top' を読み込めない
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】 Uncaught Error: Invariant Violation: 解決済み】 Uncaught Error: Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function but got: object.
-
[解決済み】JavaScriptで相対URLへのリダイレクトを行う
-
[解決済み】 Uncaught Reference Error: stLight is not defined (in Chrome only)
-
[解決済み】TypeError: AngularJSで未定義のプロパティ'get'を読み取れない