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

Posted

技术标签:

【中文标题】将数组中的所有值作为参数传递给函数【英文标题】:Pass all the values from an array into a function as parameters 【发布时间】:2013-11-03 10:30:16 【问题描述】:

我有一个值数组:

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

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

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

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

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

再说一次,我不能影响这些功能。它们就是它们的样子,我总是会收到一组值来传递给它们。

【问题讨论】:

“传递的值的数量不一致”。函数期望的参数数量如何?他们知道吗? 不,两者都不知道。 【参考方案1】:

试试

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

【讨论】:

【参考方案2】:

使用 Function 对象的.apply 方法。

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

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

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

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

【讨论】:

它说你同时发布,但我选择你的解释。非常感谢! 感谢您的回答。但是我有一个相关的问题,我的函数定义应该是什么?我的意思是如何检查所有这些参数,我应该使用 for 循环吗? @noobcode,它超出了这个问题的范围,但我想它是相关的,所以这里有一个简短的答案——查看 javascript 的“参数”对象。 developer.mozilla.org/en/docs/Web/JavaScript/Reference/… 那应该会让你继续前进:-) 如果你不知道你的数组有多少条目或者它们是什么? (例如,如果数组中填充了用户输入的数据会怎样)【参考方案3】:

Array.prototype.map()

var arr = ['a','b','c'];

function echo(x) 
  console.log(x)


function go()
  arr.map(echo);
<button onclick="go()">Test</button>

【讨论】:

【参考方案4】:

在 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);

【讨论】:

以上是关于将数组中的所有值作为参数传递给函数的主要内容,如果未能解决你的问题,请参考以下文章

将数组作为参数传递给 C 中的函数

将对象作为参数传递给函数

当我们将数组作为参数传递给其他函数时,数组的值如何变化? [复制]

C将int数组指针作为参数传递给函数

将一个函数的所有参数传递给另一个函数

请问:delphi 中数组作为函数的参数传递,这样传过去的是地址,怎样把数组作为值传递过去?