为什么会这样?
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中运行此代码。
答案 0 :(得分:4)
评论中给出了正确答案的链接,但我想在此处发布 :
["1", "2", "3"].map(parseInt);
虽然人们可以期待
[1, 2, 3]
实际结果为
[1, NaN, NaN]
parseInt通常与一个参数一起使用,但需要两个参数。第二 作为基数对于回调函数,Array.prototype.map传递3 arguments:元素,索引,数组
第三个参数被parseInt忽略,但不是第二个参数,因此可能会产生混淆。
快速修复
function returnInt(element){
return parseInt(element,10);
}
["1", "2", "3"].map(returnInt);
实际结果是一组数字(如预期的那样)
答案 1 :(得分: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);