将数组中的所有值作为参数传递给函数

时间:2013-10-24 15:48:23

标签: javascript arrays function parameter-passing

我有一系列值:

['a', 'b', 'c', 'd']

我需要将这些作为参数传递给函数:

window.myFunction('a', 'b', 'c', 'd');

如果我可以将数组/对象传递给函数,这会更容易,但是函数是由其他人编写的或者已经存在而且我无法更改它们 - 它们需要作为单独的参数传递,这就是我需要解决。

传递的值的数量不一致。它可能是一个,也可能是100.

再一次,我不能影响这些功能。它们就是这样,我总会收到一系列值传递给它们。

4 个答案:

答案 0 :(得分:24)

使用Function对象的.apply方法。

window.myFunction.apply(window, ['a','b','c','d']);

.apply方法调用您正在调用的函数,但允许您设置函数的this值(第一个参数),并允许您使用Array(第二个参数)设置其参数。

所以这里我们将window保留为this值,我们将Array作为单独的参数传递。 Array成员将作为单独的参数传递,就好像你已经这样做了一样:

window.myFunction('a','b','c','d');

答案 1 :(得分:5)

尝试

window.myFunction.apply(window, ['a', 'b', 'c', 'd']);

答案 2 :(得分:1)

在ES6中,您可以使用扩展语法。

Docs开始:

  

Spread语法允许在可能需要零个或多个参数(用于函数调用)或元素(用于数组文字)的位置扩展数组表达式或字符串等迭代,或者在需要扩展的位置扩展对象表达式预期零个或多个键值对(对象文字)。

您的语法将是:

var array = ['a', 'b', 'c', 'd'];
myFunction(...array);

<强>演示:

var array = ['a', 'b', 'c', 'd'];
myFunction(...array);

function myFunction(p1, p2, p3, p4) {
  console.log(p1, p2, p3, p4);
}

答案 3 :(得分:0)

Array.prototype.map()

&#13;
&#13;
var arr = ['a','b','c'];

function echo(x){ 
  console.log(x)
}

function go(){
  arr.map(echo);
}
&#13;
<button onclick="go()">Test</button>
&#13;
&#13;
&#13;