一、题目
let arr=[27.2,0,"0013","14px",123];
arr=arr.map(parseInt); console.log(arr)
二、分析
分析之前新手Baby一定要了解的map和parseInt的重难点;
1、map
map定义:依次循环数据中的每一项,每一次循环,把传递进来的回调函数执行
- 迭代(遍历)数组每一项(此题为5项),每一次循环执行parseInt;
- 把当前项和当前的索引号传递给parseInt;
- 方法执行的返回结果会替换数组中的这一项,以新数组形式返回(记得:「forEach不支持这个返回值」)
1-1map小案例更好了解map用法
2、parseInt重点
- parseInt(item,index) parseFloat(index)
- parseFloat没有进制
- 规则:
- [item]值必须是一个字符串,如果不是则先转换为字符串;然后从字符串左侧第一个字符开始找,把找到的有效数字字符最后转换为数字「一个都没找到就是NaN」
- 遇到一个非有效数字字符,不论后面是否还有有效数字字符,都不再查找了;parseFloat可以多识别一个小数点;
- 从[item]左侧开始进行查找,找到所有符合[index]进制的内容,然后把其按照[index]进制转换为10进制!
- [item]是设置的进制,取值有效范围是2~36之间,如果不在有效范围内,结果就是NaN
- [item]不写或者设置的为0,默认就是10「特殊情况:如果[index]是以“0x”开始的字符串,则默认值是16」
2-1parseInt小案例更好理解用法
三、题目解析
map:依次循环数据中的每一项,每一次循环,把传递进来的回调函数执行
let arr = [27.2, 0, '0013', '14px', 123]; arr = arr.map(parseInt); console.log(arr); //[27,NaN,1,1,27]
循环数组每一项(5次),每一次循环执行parseInt,并且把当前项和当前项的索引传递给它,方法执行的返回结果会替换数组中的这一项,以新数组形式返回! parseInt(27.2,0) -> parseInt('27.2',10) => 27
parseInt(0,1) => NaN 因为进制不在有效范围内
parseInt('0013',2) '001' 把其当做2进制转换为10进制 02^2+02^1+1*2^0 => 1
parseInt('14px',3) '1' 把其当做3进制转换为10进制 1*3^0 => 1
parseInt(123,4) -> parseInt('123',4) '123' 把其当做4进制转换为10进制 14^2+24^1+3*4^0 => 16+8+3 => 27
记住:map循环一定是将当前和当前索引号传递给它~新手不要把索引号忘啦~