最近发现了一道有趣的题目["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
以上是个人的一些理解,欢迎指正!