Array.map + parseInt

时间:2017-09-15 22:19:10

标签: javascript arrays parseint

var timeSplit = timeCaption.innerText.trim().split(' ');

将生成一个["10:00", "–", "18:00"]

的数组
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,它会返回正确的整数值(并且单独执行也会产生正确的结果,就像工作代码一样)。

我在这里缺少什么?

编辑:我自己投票决定关闭这个问题。很明显的错误。大家好!

3 个答案:

答案 0 :(得分:6)

parseInt接受2个参数:

  1. 要解析的字符串
  2. 基数
  3. .map使用3个参数调用您的函数:

    1. 索引
    2. 阵列
    3. 如果你考虑一下,

      parseInt("00", 1)
      

      没有意义,它会返回NaNparseInt接受2到36之间的基数。

答案 1 :(得分:1)

parseInt的第二个参数是基数或基数(如10,16等,默认为基数10)。 .map将两个参数传递给回调,该索引处的值以及索引。因此,您正在调用parseInt(10, 0),它正试图找出基数为0的10。

答案 2 :(得分:0)

.map()使用3个参数调用该函数:数组元素,数组索引和数组。 parseInt有两个参数:要解析的字符串,以及要解析它的基数。

所以startStr.map(parseInt)正在呼叫:

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

显然parseInt()radix = 0视为无基数,因此默认为基数为10.但radix = 1根本没有任何意义,因此返回NaN