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 通常与一个参数一起使用,但需要两个。第二个是基数 对于回调函数,Array.prototype.map 传递 3 个参数:元素、索引、数组

parseInt 忽略了第三个参数,但没有忽略第二个参数,因此可能会造成混淆。

快速解决

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解释了地图的工作原理。

我发现使用 jonah 提出的解决方案更容易,为您想要映射的东西创建一个返回函数而不是折腾它..

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 回答