.map返回数组而不是数字数组中的字符串

时间:2019-03-29 15:23:11

标签: javascript spread-syntax

玩弄我发现的一些代码,结果对我来说没有意义。

我不明白为什么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);

3 个答案:

答案 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)

您犯了两个错误。

  • 您正在使用Rest参数,但正在传递数组。
  • 您要添加到x数组,该数组将通过使用string转换为+。您返回v+1

const F=(x) => x.map(v => v+1)
console.log(F([1,2,3]))

如果要使用Rest参数,则只需传递123作为单独的参数。

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()参数。