1. 程式人生 > >由["1","2","3"].map(parseInt)引出的問題

由["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

以上是個人的一些理解,歡迎指正!