面试题:arr.map(parseInt);

it2023-01-06  89

面试题:arr.map(parseInt)

解题步骤

需要了解Array.prototype.map()的参数是一个回调函数回调函数调用时会传递两参数返回值是一个新的数组参数一:数组元素,参数二:数组元素对应的下标了解parseInt()在传递两个参数情况下,是如何运算的

Array.prototype.map()

Array.prototype.map = function (callback){ //callback是一个函数 let arr = [],i = 0 for (;i<this.length;i++){ arr.push(callback(this[i],i)); } return arr; }

这差不多就是Array.prototyp.map的实现原理

所以题目:arr.map(parseInt)是怎么样理解的;

Array.prototype.map = function (parseInt){ //callback是一个函数 let arr = [],i = 0 for (;i<this.length;i++){ arr.push(parseInt(this[i],i));//这是重点 } return arr; }

所以现在重点是:parseInt(this[i],i)是怎么样的返回值

parseInt的第二个参数是,进制值,就是在第一个参数中找到符合第二个参数的数据,然后将其转换为10进制第二个参数的范围是2~36之间0 是相当于 10 的

parseInt的第二个参数是,进制值,就是在第一个参数中找到符合第二个参数

parseInt(102563,8);//8进制,那么每一位数都不能大于等于8----- 102563 2.8进制数转换为10进制数 1*8**5+0*8**4+2*8**3+5*8**2+6*8**1+3*8**0 = 32768+0+1024+320+48+3 = 34163 console.log(parseInt(102563,8));//34163 parseInt(125623,3);//3进制,那么每一位都不能大于等于3---->12 2.再将3进制的12,转换为10进制 1*3**1 + 2*3**0 = 3 + 2 = 5 console.log(parseInt(125623,3)); // 5

第二个参数的范围是2~36之间,超出就返回NaN

parseInt(55,87);//NaN --->87 > 36 parseInt(88,2);//NaN ,没有一个是满足二进制的 parseInt(5,36);//5, 36不大于36 5*36**0 = 5 parseInt(10,1);//NaN

第二个参数如果是0,那么相当于10

parseInt(20,0); //20 2*10**1+0*2*10**0 = 20 + 0 parseInt(50,0); //50

解题

let arr = [10,5,9,6,3,8,20,56]; arr.map(parseInt); 第一次:parseInt(10,0); 1*10**1 + 0**10*0 = 10+0=10 ---->[10] 第二次:parseInt(5,1); NaN --->[10,NaN] 第三次:parseInt(9,2); NaN ---->[10,NaN,NaN] 第四次:parseInt(6,3); NaN ---->[10,NaN,NaN,NaN] 第五次:parseInt(3,4); 3*4**0 = 3 ----->[10,NaN,NaN,NaN,3] 第六次:parseInt(8,5); NaN------>[10,NaN,NaN,NaN,3,NaN] 第七次:parseInt(20,6); 2*6**1+0*6**0 = 12 + 0 = 12 ---->[10,NaN,NaN,NaN,3,NaN,12] 第八次:parseInt(56,7);5*7**1 + 6*7**0 = 35 +6 = 41; ------>[10,NaN,NaN,NaN,3,NaN,12,41] 最终输出:[10,NaN,NaN,NaN,3,NaN,12,41];
最新回复(0)