6

なぜこうなった?

var numbers = [ '1', '2', '3', '4' ];
var intNumbers = numbers.map( parseInt ); // intNumbers = [1, NaN, NaN, NaN]
var fltNumbers = numbers.map( parseFloat ); // fltNumbers = [1, 2, 3, 4, 5 ]

しかし、Array.prototype.map.call( numbers, parseInt );戻ります[ 1, 2, 3, 4];。このコードは Google Chrome 26.0.1410.65 で実行しています。

4

2 に答える 2

4

適切な回答へのリンクはコメントに記載されていますが、ここに投稿したいと思います:

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

期待できる一方で[1, 2, 3]

実際の結果は[1, NaN, NaN]

parseInt は多くの場合、1 つの引数で使用されますが、2 つ必要です。2 番目は基数 Array.prototype.map はコールバック関数に 3 つの引数を渡します: 要素、インデックス、配列

3 番目の引数は parseInt によって無視されますが、2 番目の引数は無視されないため、混乱が生じる可能性があります。

クイックフィックス

function returnInt(element){
   return parseInt(element,10);
}


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

実際の結果は数値の配列です(予想どおり)

于 2013-05-18T09:32:43.320 に答える
0

https://developer.mozilla.org/en-GB/docs/JavaScript/Reference/Global_Objects/Array/mapでは、マップの仕組みについて説明しています。

ジョナが提案したソリューションを使用すると、マップしたいものを投げるのではなく、返す関数を作成する方が簡単だと思います..

intN = numbers.map(function(i) { return parseInt(i) });

本当の理由は、マップする関数をフィードしようとしているのに、JS が関数を適切に取得していないことです。

最初に関数を宣言してからフィードすることをお勧めします。

var titi = function(i) { return parseInt(i); };

var intN2 = numbers.map(titi);
于 2013-05-18T09:35:59.613 に答える