小言_互联网的博客

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

530人阅读  评论(0)

["1", "2", "3"].map(parseInt)返回结果是什么?你可能觉的会是[1, 2, 3],但实际的结果为 [1, NaN, NaN]

为什么是这个结果呢?我们先来看看parseInt和map函数吧。

parseInt

parseInt(string, radix)函数可解析一个字符串,并返回一个整数。

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

当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。

当忽略参数 radix , JavaScript 默认数字的基数如下:

  • 如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
  • 如果 string 以 0 开头,ECMAScript 5,默认的是十进制的基数。旧的浏览器由于使用旧版本的ECMAScript(ECMAScript版本小于ECMAScript 5)默认使用八进制基数。
  • 如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。

map

array.map(function(currentValue,index,arr), thisValue)是数组上的一个方法,该方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。该方法按照原始数组元素顺序依次处理元素。map() 不会对空数组进行检测;不会改变原始数组。

参数 描述
function(currentValue,index,arr)

必须。函数,数组中的每个元素都会执行这个函数

参数 描述
currentValue 必须。当前元素的值
index 可选。当前元素的索引值
arr 可选。当前元素属于的数组对象

 

thisValue 可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。
如果省略了 thisValue,或者传入 null、undefined,那么回调函数的 this 为全局对象。

 解析

下面让我们来解决开头提出的问题。

array.map(parseInt)对数组array的每一项调用parseInt()方法,传入的参数为currentValue、index、arr,即每一项的值、该值的索引、该数组。但parseInt只接收两项参数,第三项参数会被忽视。

所以,["1", "2", "3"].map(parseInt)相当于[parseInt("1",0),parseInt("2",1),parseInt("3",2)]

(当参数 radix 的值为 0时,parseInt() 根据 string 来判断数字的基数。)

所以结果为[1,NaN,NaN]

拓展

如果我们要利用map方法将字符数组(如["1", "2", "3"])转为数字数组,我们可以怎样做呢?

['1','2','3'].map(str=>parseInt(str));                //[ 1, 2, 3 ]
['1.1','2.2e2','3e300'].map(str=>parseFloat(str));    //[ 1.1, 220, 3e+300 ]

​
['1','2','3'].map(Number);                            //[ 1, 2, 3 ]
['1.1','2.2e2','3e300'].map(Number);                  //[ 1.1, 220, 3e+300 ]

​

 


转载:https://blog.csdn.net/weixin_40161974/article/details/102246001
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场