4

我有一个函数应该返回除第一个参数之外的所有参数

foo = -> arguments[1..]

foo(0,1,2,3,4)

不幸的是,参数不是一个数组而是一个对象。

将对象转换为数组的最佳方法是什么?

4

3 回答 3

10

有一些 CoffeeScript-ish 选项使用splat来处理 array-ifying arguments。您可以使用slice

f = (args...) -> args.slice(1)

演示

或者您可以使用范围而不是直接调用slice

f = (args...) -> args[1..-1]

演示

您可以简化第二个版本,因为

切片索引具有有用的默认值。省略的第一个索引默认为零,省略的第二个索引默认为数组的大小。

所以你可以省略-1并说:

f = (args...) -> args[1..]

反而。感谢Scar3tt指出这一点。

于 2013-07-27T17:45:00.037 回答
1

您可以忽略第一个参数并使用 splats 捕获其余参数:

foo = (_, rest...) -> rest 

您也可以执行类似的操作foo = (args...) -> args[1...],但这将编译为两个不同的调用Array#slice与第一个片段不同)。

于 2013-07-27T21:15:12.017 回答
0

发现的是使用Array.prototype.slice

coffee> foo = -> Array.prototype.slice.apply(arguments)[1..]
[Function]
coffee> foo(0,1,2,3,4)
[ 1, 2, 3, 4 ]

另一个版本是

[].slice.call(arguments)
于 2013-07-27T17:26:12.177 回答