1、先看map方法
map返回一个新数组,其结果是数组中每个元素调用回调函数后返回的结果
array.map(function(currentValue,index,arr), thisValue)
可以看到callback接口三个参数
- currentValue是数组中正在处理的当前元素的值
- index是正在处理的当前元素的下标
- arr是map方法被调用的数组
const arr = [1, 2, 3];
arr.map((num) => num + 1);
// [2, 3, 4]
2、在看parseInt方法
parseInt() 函数解析一个字符串参数,并返回一个制定基数的整数,
parseInt(string, radix)
接受两个参数
- string是当前要解析的字符串
- radix 要解析的数字的基数介于2-36之间,为undefined,0或没有指定的情况下将做如下处理:
- 如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
- 如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
- 如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
radix为n 会把第一个参数看做是一个数的n进制表示,而返回的值是十进制
如果被解析的参数的第一个字符无法被转化成数值类型,则返回NaN,第一个字符部位数字或者大于进制数就返回NaN
3、在看当前的语句
实际执行的结果是:
['1', '2', '3'].map((item, index, arr) => {
return parseInt(item, index);
})
即返回的值为:
parseInt('1', 0) // 十进制 返回0
parseInt('2', 1) // radix是介于2-36 基数1无效无法解析所以返回 NaN
parseInt('3', 2) // 3在二进制中是一个非法的数值 NaN
最后的结果是 [1, NaN, NaN]
4、进制的转换规则
假设 n 为进制,1ND 为第一位数,2ND 为第二数(以此类推),result 为结果,二位数的转换规则如下:
result => 1ND * n ^ 1 + 2ND * n ^ 0 = 3
js 语法如下:
1ND * Math.pow(n,1) + 2ND * Math.pow(n,0)
假设 n 为进制,result 为结果,三位数的转换规则如下:
result => 1ND * n ^ 2 + 2ND * n ^ 1 + 3ND * n ^ 0 = 3
js 语法如下:
1ND * Math.pow(n,2) + 2ND * Math.pow(n,1) + 3ND * Math.pow(n,0)
假设 n 为进制,result 为结果,四位数的转换规则如下:
result => 1ND * n ^ 3 + 2ND * n ^ 2 + 3ND * n ^ 1 + 4ND * n ^ 0= 3
js 语法如下:
1ND * Math.pow(n,3) + 2ND * Math.pow(n,2) + 3ND * Math.pow(n,1) + 4ND * Math.pow(n,0)