2017-09-15 75 views
1
var timeSplit = timeCaption.innerText.trim().split(' '); 

將產生的["10:00", "–", "18:00"]Array.map + parseInt函數

var startStr = timeSplit[0].split(':'); 

陣列將產生的["10", "00"]

var res = startStr.map(parseInt); 

陣列將產生的[10, NaN]

然而

數組
var res = startStr.map(function (x) { 
    return parseInt(x); 
}); 

正常工作和將產生的[10, 0]

的「預期」陣列我希望每個字符串被傳遞到parseInt返回正確的整數值(和這樣做,分開也產生正確的結果,就像工作代碼)。

我在這裏錯過了什麼?

編輯:我自己投票結束這個問題。非常明顯的錯誤。 Thx傢伙!

+0

如果你想縮短這個以避免函數/返回語法,並且能夠使用es6特性,那麼只需要向上看。你可以這樣做 - >'var res = startStr.map(x => parseInt(x));''''''''''''''''。 – Keith

+0

是啊我知道,即時通訊黑客一起插件,我沒有設置es2015轉播,只是完全「忘記」地圖如何工作-_- thx雖然 – MJB

回答

5

parseInt接受2個參數:

  1. 字符串被解析
  2. 基數

.map電話你的函數有3個參數:

  1. 指數
  2. 陣列

如果你想想看,

parseInt("00", 1) 

並沒有真正意義,並返回NaNparseInt接受2到36之間的基數。

+0

是的,你是對的,thx – MJB

1

parseInt的第二個參數是基數或基數(如10,16等,默認爲基數10)。 .map將兩個參數傳遞給回調,該索引處的值以及索引。所以你打電話parseInt(10, 0)正試圖找出10是在基地0

0

.map()使用3個參數調用函數:數組元素,數組索引和數組。 parseInt需要2個參數:要解析的字符串和解析它的基數。

所以startStr.map(parseInt)呼籲:

parseInt("10", 0, startStr); 
parseInt("00", 1, startStr); 

顯然parseInt()對待radix = 0如沒有小數點,所以它默認爲基座10,但radix = 1沒有任何意義的,所以它返回NaN