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

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()?


当前回答

你可以在更基本的形式中使用展开运算符

[].concat(...array)

对于返回数组但希望作为参数传递的函数

例子:

function expectArguments(...args){
  return [].concat(...args);
}

JSON.stringify(expectArguments(1,2,3)) === JSON.stringify(expectArguments([1,2,3]))

其他回答

const args = ['p0', 'p1', 'p2'];
call_me.apply(this, args);

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


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

call_me(...args);

为什么不传递整个数组并在函数中根据需要处理它呢?

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

function call_me(params) {
  for (i=0; i<params.length; i++) {
    alert(params[i])
  }
}

你可以在更基本的形式中使用展开运算符

[].concat(...array)

对于返回数组但希望作为参数传递的函数

例子:

function expectArguments(...args){
  return [].concat(...args);
}

JSON.stringify(expectArguments(1,2,3)) === JSON.stringify(expectArguments([1,2,3]))

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

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

在使用展开运算符时,必须注意它必须是传递的最后一个或唯一一个参数。否则就会失败。

function callMe(...arr){ //valid arguments
    alert(arr);
}

function callMe(name, ...arr){ //valid arguments
    alert(arr);
}

function callMe(...arr, name){ //invalid arguments
    alert(arr);
}

如果你需要传递一个数组作为起始参数,你可以这样做:

function callMe(arr, name){
    let newArr = [...arr];
    alert(newArr);
}