52 Array.prototype.map() 和 parseInt 联合使用
有数组 array
let array = ["1", "3", "5", "2", "6", "4"]
使用数组的 map()
let newArray = array.map(parseInt)
打印 newArray
console.log(newArray)
parseInt
的作用是将字符型变为数值型,预期打印的结果是
[1 ,3, 5, 2, 6, 4]
但是实际的打印结果是
[1, NaN, NaN, 2, NaN, 4]
有的元素能达到预期结果,而有的结果是
NaN
,原因是Array.prototype.map()
和parseInt()
两者的参数对应问题
一、 Array.prototype.map()
参数
let newArray = array.map((value, index, array) => { }
三个参数
value
数组中正在处理的当前元素
index
数组中正在处理的当前元素的索引
array
map
方法调用的数组
二、 parseInt
参数
parseInt(string, radix)
两个参数
string
要被解析的值
radix
从 2 到 36,表示字符串的基数。例如指定 16 表示被解析值时十六进制数,且 10 并不是默认值
所以根据 Array.prototype.map()
和 parseInt()
两者的参数分析
使用数组的 map()
时
let newArray = array.map(parseInt)
<!-- 等价于 -->
let newArray = array.map((value, index, array) => {
parseInt(value, index, array)
})
因为 parseInt
只有两个参数,array
直接被忽略,但是它的第二个参数就等于数组的下标
如果是 10 进制,0-9 都是小于 10 的10 的字符,如果是 2 进制, 0-1 都是小于 2 的字符,2-36 最小是 2,而 0-9 的十个加上 a-z 的二十六个,共 36 个,所以最大为 36
在转进制的时候,如果该数大于等于进制数,结果为
NaN
即
parseInt("1", 0) // 0 以 10 进制转化,1
parseInt("3", 1) // NaN
parseInt("4", 2) // NaN
parseInt("2", 3) // 2
parseInt("6", 4) // NaN
parseInt("4", 5) // 4