玩弄我发现的一些代码,结果对我来说没有意义。
我不明白为什么REPL认为数组是一个长字符串值。.我没有做任何事情来表明这是一个字符串,我想知道为什么控制台会给我以下结果。
F = (...x) => x.map(v => x+1)
//ACTUAL
F([1,2,3]) //["1,2,31"]
//EXPECTED
F([1,2,3]) //[2,3,4]
var F =(...x) => x.map(v => x+1)
var result = F([1,2,3]);
console.log(result);
答案 0 :(得分:3)
您正在传递数组作为参数,因为您将Rest parameter用作函数参数,因此x
的值将变为[[1,2,3]]
。现在,当您使用map时,第一次迭代v
将是[1,2,3]
,而[1,2,3] + 1
将导致字符串连接,因为[1,2,3]
不是数字,而[1,2,3]
转换为字符串会产生带有逗号分隔值的字符串。
所以要么将参数传递为多个参数,要么使用简单的参数。
赞:
function F(x){ return x.map(v => x+1) }
或调用函数,如:
F(1, 2, 3)
// or
F(...[1, 2, 3])
答案 1 :(得分:1)
您犯了两个错误。
x
数组,该数组将通过使用string
转换为+
。您返回v+1
const F=(x) => x.map(v => v+1)
console.log(F([1,2,3]))
如果要使用Rest参数,则只需传递1
,2
,3
作为单独的参数。
const F=(...x) => x.map(v => v+1)
console.log(F(1,2,3))
答案 2 :(得分:0)
您正在寻找F = x => x.map(v => v+1)
,因此...
F([1,2,3]) == [2, 3, 4] # evaluates to true
不需要传播语法。函数F
应该只接受一个数组,以便它返回[1,2,3].map(v => v+1)
的结果。您有x.map(v => x+1)
没有使用要传递到v
函数中的函数的.map()
参数。