2016-09-12 83 views
-1

比方说,我有这个功能有多个参数多次调用一个函数在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当只有一个参数,但我不知道如何用各种非数字参数做到这一点。

+1

这取决于你的参数,都存储在一个数组?它们是基于用户输入的吗?你能提供更多的背景吗? – Roberrrt

+1

*“我怎样才能将所有这些调用合并为一个?”*如果您的意思是一次调用'myFunction',则不能改变'myFunction'的工作方式。根据值的来源,你当然可以使用一个循环来只对'myFunction'进行编码。 –

回答

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'] 
]: 

then:

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

虽然所有的答案都非常有帮助,但我觉得这是最完整的。谢谢大家。 :) – Stealth

2

你似乎ES6在寻找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); }) 

spread syntax

for (const args of values) myFunction(...args); 
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 
 
}

相关问题