2017-09-15 97 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