JavaScript中用map()函數把字符串變成整數

在學習JavaScript的高階函數時,遇到一個關於map()函數的問題,在實際操做中,如下代碼輸出了意想不到的結果:函數

'use strict';
var arr = ['1', '2', '3'];
var r;
r = arr.map(parseInt);
alert('[' + r[0] + ', ' + r[1] + ', ' + r[2] + ']');

結果是[1, NaN, NaN]。
通過查閱Array.prototype.map()的文檔,深刻了解了map()函數的做用機制,因爲map()接收的回調函數能夠有3個參數:callback(currentValue, index, array),一般咱們僅須要第一個參數,而忽略了傳入的後面兩個參數。不幸的是,parseInt(string, radix)沒有忽略第二個參數,致使實際執行的函數分別是:學習

  • parseInt('0', 0); // 0, 按十進制轉換prototype

  • parseInt('1', 1); // NaN, 沒有一進制code

  • parseInt('2', 2); // NaN, 按二進制轉換不容許出現2ip

能夠改成r = arr.map(Number);,由於Number(value)函數僅接收一個參數;
或者使用以下代碼解決parseInt()的轉換問題:文檔

var arr = ['1','2','3'];
var r = arr.map(function(val){
    return parseInt(val);
});
console.log(r);
相關文章
相關標籤/搜索