在 JavaScript 中将数组作为函数参数传递

IT技术 javascript arrays function call
2021-02-06 13:03:36

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

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

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

有没有更好的方法来传递xinto的内容call_me()

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

参见 MDN 文档Function.prototype.apply()


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

call_me(...args);
作为旁注,如果有人想传递关联数组(命名键),请使用对象。来自 PHP(并且总是由 google 导致这个线程)这花了我一段时间才弄清楚。然后您可以将整个对象作为参数传递。w3schools.com/js/js_objects.asp
2021-03-14 13:03:36
@timhc - 你的旁注评论很有趣,但我无法解析它(我是一个 javascript noob,通过几个教程工作)。在 JS 中,根据几个教程,关联数组一个对象。
2021-03-15 13:03:36
感谢您指出“传播”论点!不知道。
2021-03-21 13:03:36
@timhc22,当使用 json 对象作为参数传递给函数时,不要忘记参数销毁以获得更好的可读性
2021-04-04 13:03:36

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

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

function call_me(params) {
  for (i=0; i<params.length; i++) {
    alert(params[i])
  }
}
@swam 这是对call_me函数的调用它只是在末尾缺少一个分号。
2021-03-12 13:03:36
@swam 它正在执行声明的 call_me(params) 函数。
2021-03-23 13:03:36
有人可以解释“call_me(x)”行在做什么吗?它似乎是一个没有 function 关键字的函数名?它到底在做什么?
2021-03-28 13:03:36
这是因为我无法修改 call_me()。它是在其他一些库中定义的,不可能与 API 混淆。
2021-04-01 13:03:36
+1 因为即使它没有回答最初的问题,它也可能是查看此页面的 100K+ 人正在寻找的。
2021-04-10 13:03:36

在 ES6 标准中,有一个新的扩展运算符 ...可以做到这一点。

call_me(...x)

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

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

假设 call_me 是一个全局函数,所以你不希望它被设置。

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

正如@KaptajnKold 所回答的那样

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

而且您也不需要为 call_me 函数定义每个参数。你可以使用arguments

function call_me () {
    // arguments is a array consisting of params.
    // arguments[0] == 'p0',
    // arguments[1] == 'p1',
    // arguments[2] == 'p2'
}
这是非常糟糕的做法……如果您查看该函数,您将无法看到该函数需要什么,并且每个参数都是可选的。
2021-03-26 13:03:36