资讯专栏INFORMATION COLUMN

JavaScript中的map方法,以及一道js面试题

LittleLiByte / 2399人阅读

摘要:今天看见一道面试题答案是多少答案是对方法不太了解就去搜了一下,里面也包含了对这道面试题的详解。方法返回一个由原数组中的每个元素调用一个指定方法后返回值组成的新数组。使用方法处理数组时,数组元素的范围在方法第一次调用之前就已经确定了。

今天看见一道面试题:["1","2","3"].map(parseInt)答案是多少?
答案是[1,NaN,NaN]

对map()方法不太了解就去搜了一下:Array.prototype.map(),里面也包含了对这道面试题的详解。

map()方法返回一个由原数组中的每个元素调用一个指定方法后返回值组成的新数组。

语法
array.map(callback[,thisArg])

具体参数上面的链接中能看见,也就不重复了。

描述

map 方法会给远数组中的每个元素都按顺序调用一次 callbak 函数。 callback 每次执行后的返回值(包括 undefined )组合起来形成一个新数组。 callback 函数只会在有值的索引上被调用,那些从来没被赋过值或者使用 delete 删除的索引则不会被调用。

callback 函数会被自动传入三个参数:数组元素,元素索引,原数组本身。

如果 thisArg 参数有值,则每次 callback 函数被调用的时候, this 都会指向 thisArg 参数上的这个对象。若省略了 thisArg 参数,或者赋值为 null 或 defined,则 this 指向全局对象。

map 不修改调用它的原数组本身(当然可以在 callback 执行时改变原数组)。

使用 map 方法处理数组时,数组元素的范围在 callback 方法第一次调用之前就已经确定了。在 map 方法执行的过程中:原数组中增加的元素将不会被 callback 访问到;若已经存在的元素被改变或者删除,则它们的传递到 callback 的值是map 方法遍历到它们的那一时刻的值;而被删除的元素将不会访问到。

面试题

这个时候就很好理解为什么最后的返回值是[1,NaN,NaN]了,因为使用parseInt时,是可以传递两个参数的,第一个参数是被解析的值,第二个参数是进制数。map方法在调用callback函数时,会给它传递三个参数:当前正在遍历的元素,元素索引,原数组本身,第三个参数parseInt会忽视,但第二个参数,会把传递过来的索引值当做进制数来使用。所以结果是这样

如果想要得到正确的值,可以这样:

function returnInt(element){
  return parseInt(element,10);
}

["1", "2", "3"].map(returnInt);
// 返回[1,2,3]

感觉这个函数和Array.prototype.forEach()有点像。。详情Array.prototype.forEach()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80740.html

相关文章

  • 2017面试分享(js面试记录)

    摘要:为了解决这些问题,就可以使用定时器对函数进行节流。当第二次调用该函数时,它会清除前一次的定时器并设置另一个。如果前一个定时器已经执行过了,这个操作就没有任何意义。然而,如果前一个定时器尚未执行,其实就是将其替换为一个新的定时器。 2017面试分享(js面试题记录) 1. 最简单的一道题 11 * 2 a8 * 3 2. 一道this的问题 var num = 1...

    April 评论0 收藏0
  • 2017面试分享(js面试记录)

    摘要:为了解决这些问题,就可以使用定时器对函数进行节流。当第二次调用该函数时,它会清除前一次的定时器并设置另一个。如果前一个定时器已经执行过了,这个操作就没有任何意义。然而,如果前一个定时器尚未执行,其实就是将其替换为一个新的定时器。 2017面试分享(js面试题记录) 1. 最简单的一道题 11 * 2 a8 * 3 2. 一道this的问题 var num = 1...

    go4it 评论0 收藏0
  • 2017面试分享(js面试记录)

    摘要:为了解决这些问题,就可以使用定时器对函数进行节流。当第二次调用该函数时,它会清除前一次的定时器并设置另一个。如果前一个定时器已经执行过了,这个操作就没有任何意义。然而,如果前一个定时器尚未执行,其实就是将其替换为一个新的定时器。 2017面试分享(js面试题记录) 1. 最简单的一道题 11 * 2 a8 * 3 2. 一道this的问题 var num = 1...

    Aklman 评论0 收藏0
  • 2017、2018面试分享(js面试记录)记得点赞分享哦;让更多的人看到~~

    摘要:为了解决这些问题,就可以使用定时器对函数进行节流。当第二次调用该函数时,它会清除前一次的定时器并设置另一个。如果前一个定时器已经执行过了,这个操作就没有任何意义。然而,如果前一个定时器尚未执行,其实就是将其替换为一个新的定时器。 2017面试分享(js面试题记录) 1. 最简单的一道题 11 * 2 a8 * 3 var a = 2, b = 3; va...

    LiuRhoRamen 评论0 收藏0
  • 2017、2018面试分享(js面试记录)记得点赞分享哦;让更多的人看到~~

    摘要:为了解决这些问题,就可以使用定时器对函数进行节流。当第二次调用该函数时,它会清除前一次的定时器并设置另一个。如果前一个定时器已经执行过了,这个操作就没有任何意义。然而,如果前一个定时器尚未执行,其实就是将其替换为一个新的定时器。 2017面试分享(js面试题记录) 1. 最简单的一道题 11 * 2 a8 * 3 var a = 2, b = 3; va...

    testHs 评论0 收藏0

发表评论

0条评论

LittleLiByte

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<