Array.from() parseInt() 的奇怪行为
Array.from() strange behavior with parseInt()
所以我尝试使用以下代码将字符串数组转换为数字数组。
let a = ["0", "0"];
let b = Array.from(a, parseInt);
console.log(b);
而我得到的是
b = [0, NaN];
我熟悉使用 Array.map()
的类似问题,因为它为 parseInt()
提供了三个参数,而第二个参数(索引)被 parseInt()
解释为基数。但 Array.from()
.
不应该是这种情况
有人可以给我解释一下吗?
你需要有实际功能,不是参考:
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);
所以我尝试使用以下代码将字符串数组转换为数字数组。
let a = ["0", "0"];
let b = Array.from(a, parseInt);
console.log(b);
而我得到的是
b = [0, NaN];
我熟悉使用 Array.map()
的类似问题,因为它为 parseInt()
提供了三个参数,而第二个参数(索引)被 parseInt()
解释为基数。但 Array.from()
.
有人可以给我解释一下吗?
你需要有实际功能,不是参考:
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);