我想调用一个函数使用数组作为参数:

const x = ['p0', 'p1', 'p2'];
call_me(x[0], x[1], x[2]); // I don't like it

function call_me (param0, param1, param2 ) {
  // ...
}

是否有更好的方法将x的内容传递给call_me()?


当前回答

假设call_me是一个全局函数,因此不需要设置此值。

var x = ['p0', 'p1', 'p2'];
call_me.apply(null, x);

其他回答

函数参数也可以是数组:

函数foo([a,b,c], d){ console.log (a, b, c, d); } foo((1、2、3)、4)

当然也可以用spread:

函数foo(a, b, c, d){ Console.log (a, b, c, d); } foo(…[1,2,3], 4)

在ES6标准中有一个新的扩展运算符…这就是它的作用。

call_me(...x)

除IE外,所有主流浏览器都支持。

展开操作符可以做许多其他有用的事情,链接的文档在这方面做得非常好。

使用JSON而不是数组有更好的方法!

   // Call a function with a Json Key / Value Pair:
   sendMail({param1: p1, param2: p2});

   // Function definition and usage of value pairs:
   function sendMail(data){
     var parameter1 = data.param1;
     var parameter2 = data.param2;
   }

正如@KaptajnKold回答的那样

var x = [ 'p0', 'p1', 'p2' ];
call_me.apply(this, x);

你也不需要为call_me函数定义每个参数。 你可以用参数

function call_me () {
    // arguments is a array consisting of params.
    // arguments[0] == 'p0',
    // arguments[1] == 'p1',
    // arguments[2] == 'p2'
}
const args = ['p0', 'p1', 'p2'];
call_me.apply(this, args);

请参阅MDN文档中的Function.prototype.apply()。


如果环境支持ECMAScript 6,你可以使用spread参数:

call_me(...args);