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

.map returning string in array instead of array of numbers

尝试使用我发现的一些代码,结果对我来说没有意义。

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

你犯了两个错误。

  • 您正在使用 Rest 参数,但您传递的是一个数组。
  • 您正在添加到数组 x 并将通过使用 + 转换为 string。你returnv+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))

您将数组作为参数传递,因为您使用 Rest parameter 作为函数参数,x 的值将变为 [[1,2,3]]。现在,当您使用地图时,在第一次迭代中 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])

您正在寻找 F = x => x.map(v => v+1),因此...

F([1,2,3]) == [2, 3, 4] # evaluates to true

不需要扩展语法。函数 F 应该只接受一个数组,这样它 returns 就是 [1,2,3].map(v => v+1) 的结果。您有 x.map(v => x+1),它没有使用传递给 .map() 函数的函数的 v 参数。