0

我有一个元素随机计数的数组,例如:

var array = [1, 2];

我想用下一个参数执行一些函数:

functionName(SOME_CONST, array[0], array[1])

考虑到数组可能有不同数量的参数,最好的方法是什么?

4

4 回答 4

3

查看https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/apply了解有关如何使用 Function.prototype.apply 方法的详细信息。

只要您想将数组中的所有项目用作您正在调用的函数中的参数,您就可以使用:

function some_method(a, b, c) {}

var array = [1,2];
some_method.apply(this, ['SOME_CONST'].concat(array));

这将导致调用 some_method,其中 a 是“SOME_CONST”,b 和 c 是数组中的前两个元素。如果数组中有更多元素,它们将出现在 some_method 函数的参数列表中。

于 2012-05-17T15:16:17.957 回答
2

您可以只调用函数并传入数组本身而不是像这样的元素

function functionName(SOME_CONST, myArray){
  //myArray contains the same elemnts here too
}

然后你可以像这样调用函数

   var myArray = [1,2];
   functionName(CONST_VAL,myArray);
于 2012-05-17T15:13:28.080 回答
2

最简单的解决方案是将整个数组传递给函数并让函数对其进行迭代。这将允许可变长度数组。

functionName(SOME_CONST, array) {
  for (var ii = 0, len = array.length; ii < len; ii++) {
    // do something.
  }
}
于 2012-05-17T15:13:43.257 回答
1

使用.apply, 和数组连接,我的意思是创建新数组,让SOME_CONST第一个元素成为第一个元素并加入你已经拥有的另一个数组。

你可以这样做,

var array = [1, 2];
functionName.apply(thisObj || window, [SOME_CONST].join(array));



function functionName(a, b, c){
 //a is SOME_CONST, b is 1 and c is 2    
}

thisObj是您正在调用的函数的范围/上下文。如果您没有thisObj刚刚通过的window对象

于 2012-05-17T15:18:11.630 回答