2017-08-12 51 views
0

我遇到過一些奇怪的事情。parseInt與Array.prototype.map

我想解析一個字符串與時間(例如「12:00」,「13:30」)成兩個單獨的整數。 我嘗試這樣做:

timeString = "12:00" 
[hours, minutes] = timeString.split(":").map(parseInt) 

不過分出來作爲NaN的

我覺得有與parseInt函數取意於「00」的一個問題,但是當我在控制檯我試着parseInt函數(「00」)得到0.

有人可以對此有所瞭解嗎?

+0

因爲'parseInt函數()'需要一個第二個(可選)參數,陣列#地圖提供了第二個參數傳遞的功能。你可以使用'.map(parseFloat)','.map(Number)','.map(Math.floor)'或'.map(int)'(我通常在'const int = v => 0 | v,uint = v => v >>> 0;') – Thomas

回答

0

parseInt需要2個參數,parseInt(numberOrString, numberBase)可用於二進制字符串,十六進制字符串等.map需要回調,前兩個參數是.map(item, index)。 所以基本上你打電話parseInt("00", 1)它返回NaN。

更改您的代碼 timeString = "12:00" var [hours, minutes] = timeString.split(":").map(i => parseInt(i))

2

Array#map調用帶有三個參數的函數:

  1. 當前元素

  2. 當前索引

  3. 陣列

這意味着,在下面的代碼段中,parseInt調用與"00"1(這是該指數):

timeString = "12:00" 
[hours, minutes] = timeString.split(":").map(parseInt) 

的第二個參數parseInt必須比2更大,否則NaN將回。

這就是發生在這裏。

爲了解決這個問題,你可以使用:

timeString = "12:00" 
[hours, minutes] = timeString.split(":").map(v => parseInt(v, 10))