由["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
以上是個人的一些理解,歡迎指正!