map方法深入剖析,以及相关面试题

144 阅读2分钟

之前写过一篇关于数组方法的总结,地址点击跳转,今天来详细讲解一下用法以及分析一个练习题.

  • 定义:

    1. map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
    2. map() 方法按照原始数组元素顺序依次处理元素。
    3. map() 不会对空数组进行检测。
    4. map() 不会改变原始数组。
  • 语法:

    array.map(function(currentValue,index,arr), thisValue)
    
    • 参数解释:
      • function(currentValue,index,arr)这个是处理函数,用于处理原数组的每一个值,并返回该值.
        • currentValue 必须。当前元素的值
        • index 可选。当前元素的索引值
        • arr 可选。当前元素属于的数组对象
      • thisValue 可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。 如果省略了 thisValue,或者传入 null、undefined,那么回调函数的 this 为全局对象。
  • 习题:

    ['1', '2', '3'].map(parseInt)//这个的结果是啥?
    
    
    • 要想解答这个咱们要先弄清楚这map的传参,他的第一个参数是一个functon,这个function会默认接受到三个参数(currentValue,index,arr)分别是(当前的元素值--索引值--原数组)
    • 现在我们这个练习参入的这个function是parseInt,这个parseInt函数只接受二个参数即parseInt(string, radix)
      • parseInt() 函数可解析一个字符串,并返回一个整数。
      • string:要被解析的字符串
      • radix:可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。 如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。 如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
    • 此时,string就是currentValue的值,radix就是index的值
    ['1', '2', '3'].map(parseInt)可以**想象**为 ==> ['1', '2', '3'].map(parseInt(currentValue,index))
    //这样  parseInt('1',0)==> //radix为0时,且string参数不以“0x”和“0”开头时,按照10为基数处理。这个时候返回1
    //      parseInt('2',1)==>//基数为1(1进制)表示的数中,最大值小于2,所以无法解析,返回NaN
    //      parseInt('3',2)==>//基数为2(2进制)表示的数中,最大值小于3,所以无法解析,返回NaN
    //综合以上:我们可以得出答案为[1,NaN,NaN]
    
  • 说明:

    • 很多时候我们往往只是关注该方法如何简单的使用,而没有关注此函数的具体参数有哪些,代表啥,导致一些复杂的情况无法处理或者分析不出结果,这些往往是决定细节的地方.加油!