2

これが予期しない結果をもたらす理由を誰かが説明できますか:

["1", "2", "3"].map(parseInt);

[1, 2, 3] の代わりに [1, NaN, NaN] を返すものは?</p>

引数が 1 つの関数を強制することで機能させることができます。

["1", "2", "3"].map(function(s) {return parseInt(s);});

しかし、最初の方法で正確に何がうまくいかなかったのかわかりません。

4

3 に答える 3

1

この記事では、最後のサンプルで問題について説明しています。これは、あなたがやろうとしていることとまったく同じです。しかし、彼らが参照しているブログ記事はもう存在しません。

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 
于 2013-06-30T10:03:55.857 に答える
1

parseIntは 2 つの引数 (2 番目は基数) を取るため、これは機能しません。詳細については、このMDN ページの下部を参照してください。引用:

parseInt は多くの場合、1 つの引数で使用されますが、2 つ必要です。2 番目は基数 Array.prototype.map は、要素、インデックス、配列の 3 つの引数をコールバック関数に渡します。3 番目の引数は parseInt によって無視されますが、2 番目の引数は無視されないため、混乱が生じる可能性があります。

于 2013-06-30T10:04:55.870 に答える