由["1","2","3"].map(parseInt)引出的问题

最近发现了一道有趣的题目["1",'2','3'].map(parseInt),看到这道题,我首先想起了map()方法和parseInt(),但是记忆却是很模糊。后来查阅了资料,以此作为笔记,写下自己的一些理解。

javascript map()方法

例如: 

var arr = ['1','2','3']

var list = arr.map(function(item, index, arr) {

console.log('item',item);//item指向数组的每一项

console.log('index',index);//数组的索引值index

console.log('arr',arr);//arr指向原数组

}, this);//this指向函数的回调,可以为null或者不写,不写时为undefined

用法:(简单的一个例子,只用了item,index两个参数)

function callback(item,index){

return item*index

}

var arr1 = [2,3,4].map(callback)

console.log(arr1)//0,3,8

下面说一下parseInt(),它有两个参数,参数一是传入的字符串,参数二是要解析数字的基数。如果基数为0或者不写,默认是以十进制解析。同时基数的范围在2~36之间,小于2,大于36则会解析为NaN。还有字符串表示的数字不能大于基数。

结合map()和parserInt()解释一下开头提出的['1','2','3'].map(parsreInt)

item:"1",index:0    //上面提到的参数二是0时,默认解析为十进制   所以为1

item:'2',index:1  // 2大于1  所以为NaN

item:‘3’,index:2 //3大于2  所以为NaN

最后答案是:[1,NaN,NaN]

另外注意:map()不改变原数组,会返回一个新的数组

本以为对这类题目是理解了的,后来碰到一道类似却复杂点的题目

['1','2','3','4','5','6',7,8,9,10,11,12,13,14,15].map(parseInt)    

答案:[1,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,9,11,13,15,17,19]

解释: 1-0   2-1   3-2  4-3  5-4  6-5  7-6  8-7  9-8  10-9  11-10  12-11  13-12  14-13  15-14

item:"1",index:0 //上面提到的参数二是0时,默认解析为十进制    所以为1

item:'2',index:1  // 2大于1  所以为NaN    同理item=3,4,5,6,7,8,9 都是返回NaN

item:10,index:9 //刚开始我错误认为10大于9,不符合字符串表示的数字不能大于基数,就认为是NaN。其实不是的,应该是1和9比较,就像刚开始也提到参数一是字符串,是要分开10,拿1和9比较.所以是9

item:11,index:10 //11

item:12,index:11  //12*1+1 = 13   同理item=13,14,15  ==>15 ,17, 19

以上是个人的一些理解,欢迎指正!

猜你喜欢

转载自blog.csdn.net/qq_38401285/article/details/85311629
今日推荐