在JavaScript中使用多个参数多次调用函数

时间:2016-09-12 13:46:27

标签: javascript

假设我有这个功能

function myFunction(a, b, c) {
    ... code here ...
}

现在我想多次用几个不同的参数调用它:

myFunction('sky', 'blue', 'air');
myFunction('tree', 'green', 'leaf');
myFunction('sun', 'yellow', 'light');
myFunction('fire', 'orange', 'heat');
myFunction('night', 'black', 'cold');

如何将所有这些调用合并为一个?

我知道如何使用迭代或forEach只有一个参数,但我无法弄清楚如何使用各种非数字参数来做。

3 个答案:

答案 0 :(得分:3)

除非你改变myFunction,否则你不能把它叫做一次,然后让它神奇地表现得像被叫五次一样。

但是,如果您使用参数的信息存储在其他地方,则可以在循环中编码单个调用。

例如,如果我们假设一个objets数组:

var data = [
    {a: 'sky', b: 'blue', c: 'air'},
    {a: 'tree', b: 'green', c: 'leaf'},
    {a: 'sun', b: 'yellow', c: 'light'},
    {a: 'fire', b: 'orange', c: 'heat'},
    {a: 'night', b: 'black', c: 'cold'}
]:

然后

data.forEach(function(entry) {
    myFunction(entry.a, entry.b, entry.c);
});

或者如果它是一个数组数组,我们可以使用漂亮的Function#apply函数:

var data = [
    ['sky', 'blue', 'air'],
    ['tree', 'green', 'leaf'],
    ['sun', 'yellow', 'light'],
    ['fire', 'orange', 'heat'],
    ['night', 'black', 'cold']
]:

然后:

data.forEach(function(entry) {
    myFunction.apply(null, entry);
});

答案 1 :(得分:2)

您似乎在寻找apply

var values = [
    ['sky', 'blue', 'air'],
    ['tree', 'green', 'leaf'],
    ['sun', 'yellow', 'light'],
    ['fire', 'orange', 'heat'],
    ['night', 'black', 'cold']
];
values.forEach(function(args) { myFunction.apply(null, args); })
ES6中的

spread syntax

for (const args of values) myFunction(...args);

答案 2 :(得分:1)

假设您已经拥有一个包含所有值的数组:



var colors = ['sky', 'blue', 'air', 'tree', 'green', 'leaf', 'sun', 'yellow', 'light', 'fire', 'orange', 'heat', 'night', 'black', 'cold'];

while(colors.length > 0){
  myFunction.apply(this, colors.splice(0,3)); //call the function with chunks of 3 elements
}