Array.from()与parseInt()的奇怪行为

时间:2019-07-02 08:58:39

标签: javascript arrays parseint

因此,我尝试使用以下代码将字符串数组转换为数字数组。

let a = ["0", "0"];
let b = Array.from(a, parseInt);
console.log(b);

我得到的是

b = [0, NaN];

我熟悉使用Array.map()的类似问题,因为它为parseInt()提供了三个参数,而第二个参数(索引)被parseInt()解释为基数。但Array.from()并非如此。

有人可以给我一个解释吗?

1 个答案:

答案 0 :(得分:-2)

您需要具有实际功能,而不是引用:

let a = ["0", "0"];
let b = Array.from(a, e => parseInt(e));

console.log(b);

问题在于,使用map(这是Array.from的第二个参数)将三个参数传递给回调-当前项(所需),索引(不必要),和数组(不必要)。所有这三个都应用于parseInt-看起来像这样:

let b = Array.from(a, (item, index, arr) => parseInt(item, index, arr));

不幸的是,parseInt使用第二个参数作为它产生的数字的基数(例如,十进制是10的底数,二进制是2的底数,八进制是8的底数,十六进制是16的底数)。传递的第二个参数是索引。因此,它尝试将0解析为以1为底的数字,该数字不存在。

您也可以只使用Number构造函数。

let a = ["0", "0"];
let b = Array.from(a, Number);

console.log(b);