これが予期しない結果をもたらす理由を誰かが説明できますか:
["1", "2", "3"].map(parseInt);
[1, 2, 3] の代わりに [1, NaN, NaN] を返すものは?</p>
引数が 1 つの関数を強制することで機能させることができます。
["1", "2", "3"].map(function(s) {return parseInt(s);});
しかし、最初の方法で正確に何がうまくいかなかったのかわかりません。
これが予期しない結果をもたらす理由を誰かが説明できますか:
["1", "2", "3"].map(parseInt);
[1, 2, 3] の代わりに [1, NaN, NaN] を返すものは?</p>
引数が 1 つの関数を強制することで機能させることができます。
["1", "2", "3"].map(function(s) {return parseInt(s);});
しかし、最初の方法で正確に何がうまくいかなかったのかわかりません。
この記事では、最後のサンプルで問題について説明しています。これは、あなたがやろうとしていることとまったく同じです。しかし、彼らが参照しているブログ記事はもう存在しません。
array.map() および parseInt コールバック
Stackoverflowから引用されたより良い答え:
したがって、実際に 2 つの引数を期待する関数を呼び出すと、2 番目の引数は要素のインデックスになります。
この場合、基数 0、1、2 を順番に使用して parseInt を呼び出すことになりました。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
parseInt
は 2 つの引数 (2 番目は基数) を取るため、これは機能しません。詳細については、このMDN ページの下部を参照してください。引用:
parseInt は多くの場合、1 つの引数で使用されますが、2 つ必要です。2 番目は基数 Array.prototype.map は、要素、インデックス、配列の 3 つの引数をコールバック関数に渡します。3 番目の引数は parseInt によって無視されますが、2 番目の引数は無視されないため、混乱が生じる可能性があります。