首先,先搞明白parseInt函數和map函數的做用!!!數組
parseInt() 函數可解析一個字符串,並返回一個整數。
bash
語法:函數
parseInt(string,radix)
第一個參數:string,要解析的字符串,這沒什麼好說的,必選參數。ui
第二個參數:radix,可選參數,表示你要按幾進制的格式來解析字符串。this
radix傳參
1. 傳參
要求:整數,且在2~36之間。
若radix 大於36 或者 小於2且不等於0 ,那麼直接返回NaN,
若radix爲0 ,則按照10進制來解析。
若radix爲字符串,則把這個先parseInt,再解析。
2. 不傳參
若要解析的字符串以'0x'或'0X'開頭,那麼以16進制解析。
其他狀況按10進制解析。複製代碼
實際用法:spa
// 1. 正常全解析
parseInt("123"); // 123
parseInt("489",10); // 489
parseInt("1010",2); // 10
parseInt("a01",16); // 2561 1+0+10*16*16
parseInt("0xa01"); // 2561
parseInt("123",0); // 123
parseInt("123","5"); // 38
parseInt("123","5.2"); // 38
// 2. radix不在範圍內返回NaN
parseInt("123",1); // NaN
parseInt("123",37); // NaN
// 3. 因進制問題返回字符串部分解析結果
parseInt("102",2); // 2
parseInt("10ac",10); // 10
// 4. 因進制問題返回NaN
parseInt("a10",10); // NaN複製代碼
注意:code
每種進制在 位上 都有它合理的取值範圍,如:十進制,每一位的取值爲0-9,十六進制爲0-f,超出取值範圍則不承認。索引
parseInt在解析字符串時,按照字符順序一個一個檢查,若是第一個字符就爲超範圍的值,則直接返回NaN,若不是則檢查下一位,直到檢查完畢或者碰到某一位值超範圍,而後將檢查過的不超範圍的字符串解析,後面的捨棄。如:parseInt("456a23",10); 字符檢查到a時,發現超出範圍,則將從a之後的捨棄,只返回「456」的解析結果。字符串
map()方法返回一個新數組,數組中的元素爲原始數組元素調用函數處理的後值。
string
map()方法按照原始數組元素順序依次處理元素,它不處理空數組,也不會改變原始數組。
語法:
arr.map(function(item,index,arr),thisValue)
第一個參數爲數組值循環的處理函數,每一個值都通過此函數處理,item是當前值,index是當前值得索引值,arr是當前數組,其中item爲必選參數,index與arr爲可選參數
實際使用:
var arr = [1,-2,3]
var newArr = arr.map((item,index)=>{
return item>0?item:-item; // 將數組元素變成正數後返回
})
newArr; // [1,2,3]
複製代碼
[1,2,3].map(parseInt)
注意: 傳參
parseInt做爲map的處理函數,map是能夠向其傳遞三個參數的,分別爲item,index,arr
而parseInt是能夠接收到兩個參數的,因而乎,parseInt在接受參數時,接受了map傳遞過來的item和index
因此,var arr=['1','2','3']在map中每次解析其實在運行 parseInt(arr[index],index)
parseInt('1',0) // 按十進制解析 返回1
parseInt('2',1) // radix<2 返回NaN
parseInt('3',2) // 被解析字符串首個字符就不在二進制合理取值範圍內,返回NaN複製代碼