Javascript 对数组应用parseInt会产生奇怪的结果
尝试运行一个简单的javascript来解析字符串中的一位数整数,如下所示:Javascript 对数组应用parseInt会产生奇怪的结果,javascript,Javascript,尝试运行一个简单的javascript来解析字符串中的一位数整数,如下所示: var s = "22123222222213123212322123213222"; var a = s.split(""); var b = a.map(parseInt); console.log(b); [2, NaN, 1, 2, 3, 2, 2, 2, 2, 2, 2, 2, 1, 3, 1, 2, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 2, 1, 3, 2, 2, 2] 为什么索引
var s = "22123222222213123212322123213222";
var a = s.split("");
var b = a.map(parseInt);
console.log(b);
[2, NaN, 1, 2, 3, 2, 2, 2, 2, 2, 2, 2, 1, 3, 1, 2, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 2, 1, 3, 2, 2, 2]
为什么索引为1的元素有一个NaN
在控制台中拨弄:
编辑
在得到下面的正确答案后,我觉得我必须查找这个“地图(编号)”业务。事实证明,Mozilla有一个关于这个具体案例的“gotcha”条款 parseInt有两个参数 parseInt(字符串,基数) 和
map
的回调函数接受三个参数:
映射(当前值、索引、数组)
因此,currentValue
的索引
作为基数
传递给parseInt
函数。使用带基数的parseInt
:
var s = "22123222222213123212322123213222";
var a = s.split("");
var b = a.map(e => parseInt(e, 10));
或者使用Number
代替parseInt
:
var s = "22123222222213123212322123213222";
var a = s.split("");
var b = a.map(Number);
a.map
按顺序将数组的值、索引和数组本身传递给parseInt
(或者在这个答案的情况下,Number
)。因此,为什么基数
需要注意。.map()
提供了用作基数
a.map(x=>x | 0)的索引(0,1,2,…)代码>