经典面试题[1,2,3].map(parseInt)解析
最近看到这道经典面试题[1,2,3].map(parseInt),本来想的很简单,不就是把1,2,3分别传入parseInt然后返回嘛,结果不应该是[1,2,3]嘛,但是看了答案才发现不是这么简单,还是要细心点多想想。。。
这道题目其实真心不难,只要相同了就好,我们拆解开来看。
map函数
map()方法创建一个新数组,其结果是该数组中每个元素都调用一个提供的函数后返回的结果。
1 | let newArray = array.map((item[, index[, array]]) => { |
- item: 回调函数当前正在处理的元素
- index: 正在处理元素的索引
- array: 调用map的数组
一般来说我们只需要用到item就够了,但是这几个参数map方法是全部会传递给你的
划重点,item,index,array这几个参数在回调函数中是都可以接收到的
接下来看parseInt方法吧
parseInt
parseInt(string, radix)将一个字符串string转为radix进制的整数,返回解析后的整数的十进制数,如果无法解析则返回NaN。
- string: 要解析到值
- radix: 2-36之间的一个基数或者说进制。
1 | parseInt(10) // 10 ---- 10进制的字符串'10'转成10 |
对于radix还需要注意在基数为 undefined,或者基数为 0 或者没有指定的情况下,JavaScript 作如下处理:
如果字符串 string 以”0x”或者”0X”开头, 则基数是16 (16进制).
如果字符串 string 以”0”开头, 基数是8(八进制)或者10(十进制),那么具体是哪个基数由实现环境决定。ECMAScript 5 规定使用10,但是并不是所有的浏览器都遵循这个规定。因此,永远都要明确给出radix参数的值。
如果字符串 string 以其它任何值开头,则基数是10 (十进制)。
综合map和parseInt
记住map方法中回调函数的第二个参数是操作元素的索引
所以
1 | [1,2,3].map(parseInt) |
等同于
1 | [1,2,3].map((item, index) => { |
所以得到的结果数组应该是
1 | [parseInt(1, 0), parseInt(2, 1), parseInt(3, 2)] |
二进制中不可能有3,同样1作为基数也不可能有2
所以最终结果是
1 | [1, NaN, NaN] |
经典面试题[1,2,3].map(parseInt)解析
https://zhaolei-hu.github.io/2022/08/23/经典面试题-1-2-3-map-parseInt-解析/