map(func)
和map(function(x) { return func(x); })
之间的区别是什么?
考虑这个例子:
const lines = '1\n2\n3';
const result = lines.split('\n').map(parseInt);
console.log(result )
这会返回[1, NaN, NaN]
,这不是我的预期。
但是:
const lines = '1\n2\n3';
const result = lines.split('\n').map(function(x){ return parseInt(x)});
console.log(result)
返回预期的:[1, 2, 3]
。这两种形式有什么区别,为什么在第一个例子中结果不是[1, 2, 3]
?
答案 0 :(得分:3)
parseInt
有第二个参数(基数)。
基本上你执行这个
value index parseInt comment
----- ----- -------- -----------------------------------------------------
'1' 0 1 with radix 0, and value 1 parseInt assumes radix = 10
'2' 1 NaN because of the wrong value for the radix
'3' 2 NaN because of the wrong value for the radix
要转换为数字,您可以使用Number
。
var lines = '1\n2\n3'
console.log(lines.split('\n').map(Number));

要获取整数值,您也可以使用Math.floor
。
var lines = '1\n2\n3'
console.log(lines.split('\n').map(Math.floor));

答案 1 :(得分:2)
不同之处在于.map
传递给它的函数3参数:
.map(element, index, array)
当parseInt
函数接受2个参数时
parseInt(string, radix)
因此,您将index作为基数传递。这就是你的结果错误的原因。如果parseInt只接受一个参数就可以工作。
答案 2 :(得分:2)
因为地图中的索引将被传递到地图函数
let lines = '1\n2\n3'
let a = lines.split('\n').map(parseInt);
console.log(a)
// Your code above is expanded as below
a = lines.split('\n').map((x, i) => {
return parseInt(x, i)
})
console.log(a)
// To fix it, use this
lines.split('\n').map(x => parseInt(x));