js map与parseInt的坑

先看一个例子:

var arr = ['1', '2', '3'];
var r;
r = arr.map(parseInt);
console.log(r);//[1, NaN, NaN]

为什么会这样呢?
先看一下map和parseInt的介绍:
parseInt(string, radix)

string:必需。要被解析的字符串。
radix :可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。

如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。

如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

array1.map(callbackfn[, thisArg])
array1:必需。一个数组对象。
callbackfn:必需。一个接受最多三个参数的函数。对于数组中的每个元素,‘map‘ 方法都会调用 ‘callbackfn‘ 函数一次。
thisArg:可选。可在 ‘callbackfn‘ 函数中为其引用 ‘this‘ 关键字的对象。如果省略 ‘thisArg‘,则 ‘undefined‘ 将用作 ‘this‘ 值。

map中回调函数的语法:function callbackfn(value, index, array1),可使用最多三个参数来声明回调函数。

第一参数value,数组元素的值;第二个参数index,数组元素的数组所以;array1,包含该元素的数组对象。

所以[“1”,“2”,“3”].map(parseInt)所表示的是
parseInt(“1”, 0, arr)
parseInt(“2”, 1, arr)
parseInt(“3”, 2, arr)

解决办法当然有了,换一个函数嘛!

//解决方案
var arr = ['1', '2', '3'];
var r;
r = arr.map(function parseInt2(x) {   //一个一个的paresInt
	return parseInt(x);
});
console.log(r);
//or

var arr = ['1', '2', '3'];
var r;
r = arr.map(Number); //直接用Number()方法也可以
console.log(r);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值