0

这可能是重复的,但我在找到正确答案方面收效甚微。我正在尝试实现这样的目标:

var joinArrays = function(myCollectionOfArguments) {
    return array.concat(array1, array2, ..... , arrayN);
};

在这种情况下myCollectionOfArguments将是array1, array2, ..... , arrayN. 我怎么能实现这样的目标?我确实知道,如果我有一个回调函数,我会冷传递尽可能多的参数.apply(),但在这种情况下,我对这种方法有点困惑。

编辑:所以,为了更具描述性:我可以传递任意数量的参数,而不是只传递一个参数,而不必在定义函数的参数时指定它,在我的情况下myCollectionOfArguments,将只是一个参数定义函数,但是当我想使用函数时,我希望能够传递多个参数;

4

4 回答 4

4

您可以将arguments对象用于任意数量的参数,甚至可以将其直接传递给.apply

var joinArrays = function() {
    return [].concat.apply([], arguments);
};

顺便说一句,bind在这里使用会更优雅:

var joinArrays = Array.prototype.concat.bind([]);
于 2012-12-17T17:59:23.080 回答
2

如果我的意图正确,请尝试:

var joinArrays = function(a) {
  return a.concat.apply(a, Array.prototype.slice.call(arguments, 1));
};

var foo = joinArrays([1, 2], [3, 4], [5, 6]);

console.log(foo); // => [1, 2, 3, 4, 5, 6] 
于 2012-12-17T17:57:40.727 回答
0

不确定我是否理解,但您可以传递任意数量的数组:

joinArrays([1,2,3], [4,5,6], [7,8], [9,10,11,12])

然后使用arguments里面的特殊变量读取所有这些joinArrays()

于 2012-12-17T17:53:52.047 回答
0
function testFunction()
{
    var arg1 = arguments[0];
    var arg2 = arguments[1];
    var arg3 = arguments[2];
}
于 2012-12-17T17:53:36.207 回答