因此,我尝试使用以下代码将字符串数组转换为数字数组。
let a = ["0", "0"];
let b = Array.from(a, parseInt);
console.log(b);
我得到的是
b = [0, NaN];
我熟悉使用Array.map()
的类似问题,因为它为parseInt()
提供了三个参数,而第二个参数(索引)被parseInt()
解释为基数。但Array.from()
并非如此。
有人可以给我一个解释吗?
答案 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);