map和parseInt概念+练习

126 阅读2分钟

一、题目

let arr=[27.2,0,"0013","14px",123];

arr=arr.map(parseInt); console.log(arr)

image.png

二、分析

分析之前新手Baby一定要了解的map和parseInt的重难点;

1、map

map定义:依次循环数据中的每一项,每一次循环,把传递进来的回调函数执行

  • 迭代(遍历)数组每一项(此题为5项),每一次循环执行parseInt;
  • 当前项当前的索引号传递给parseInt;
  • 方法执行的返回结果会替换数组中的这一项,以新数组形式返回(记得:「forEach不支持这个返回值」)

1-1map小案例更好了解map用法

image.png

2、parseInt重点

  • parseInt(item,index) parseFloat(index)
  • parseFloat没有进制
  • 规则:
  1. [item]值必须是一个字符串,如果不是则先转换为字符串;然后从字符串左侧第一个字符开始找,把找到的有效数字字符最后转换为数字「一个都没找到就是NaN」
  2. 遇到一个非有效数字字符,不论后面是否还有有效数字字符,都不再查找了;parseFloat可以多识别一个小数点;
  3. 从[item]左侧开始进行查找,找到所有符合[index]进制的内容,然后把其按照[index]进制转换为10进制!
  4. [item]是设置的进制,取值有效范围是2~36之间,如果不在有效范围内,结果就是NaN
  5. [item]不写或者设置的为0,默认就是10「特殊情况:如果[index]是以“0x”开始的字符串,则默认值是16」

2-1parseInt小案例更好理解用法

image.png

三、题目解析

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

image.png

记住:map循环一定是将当前和当前索引号传递给它~新手不要把索引号忘啦~