【問題】
最近看到的題如下,分別輸出什麼結果,第一反應[1,2,3],[10,10,10,10,10]?對麼?
[‘1’,‘2’,‘3’].map(parseInt)
[‘10’,‘10’,‘10’,‘10’,‘10’].map(parseInt)
正確答案:[1, NaN, NaN] , [10, NaN, 2, 3, 4]
果然不對,來來來,從頭捋,看自己爲什麼想錯了,肯定是map和parseInt理解的不徹底
【Array.map()】
語法 :arr.map((current[, index, arr]) => {})
- 參數
- current 數組中當前需要處理的元素
- index 索引(可選)
- arr map方法調用的數組(可選)
- 返回值
- 新數組
【parseInt(string, radix)】
parseInt()文檔
語法:parseInt(string, radix)
- 參數
- string 要處理的字符串
- radix 進制數
- 返回值
- 按照進制數將字符串按照進制數返回Number類型
- 無法被轉換的返回NaN
【問題的思路】
數組當前元素作爲parseInt的第一個參數,index作爲parseInt的進制參數
注意:如果radix沒有指定或者爲0
,參數會被假定以10爲基數
來解析,radix參數範圍是2~36
// 實際執行
['1', '2', '3'].map((item, index) => {
return parseInt(item, index)
})
parseInt('1', 0); // 1 如果radix沒有指定或者爲0,參數會被假定以10爲基數來解析
parseInt('2', 1); // NaN
parseInt('3', 2); // NaN
// 實際執行
['10', '10', '10', '10', '10'].map((item, index) => {
return parseInt(item, index)
})
parseInt('10', 0); // 10
parseInt('10', 1); // NaN
parseInt('10', 2); // 2 ==> 1*2^1 + 0*2^0
parseInt('10', 3); // 3 ==> 1*3^1 + 0*2^0
parseInt('10', 4); // 4 ==> 1*4^1 + 0*2^0