我有一个随机计数元素的数组,例如:
var array = [1, 2];
我想用下一个参数执行一些函数:
functionName(SOME_CONST, array[0], array[1])
考虑到数组可能有不同数量的参数,最好的方法是什么?
答案 0 :(得分:3)
有关如何使用Function.prototype.apply方法的详细信息,请查看https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/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函数的参数列表中。
答案 1 :(得分:2)
你可以调用函数并传入数组本身而不是像这样的元素
function functionName(SOME_CONST, myArray){
//myArray contains the same elemnts here too
}
然后你可以像这样调用这个函数
var myArray = [1,2];
functionName(CONST_VAL,myArray);
答案 2 :(得分:2)
最简单的解决方案是将整个数组传递给函数并让函数迭代它。这将允许可变长度数组。
functionName(SOME_CONST, array) {
for (var ii = 0, len = array.length; ii < len; ii++) {
// do something.
}
}
答案 3 :(得分: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
对象