2016-09-12 12 views
-1

Lassen Sie uns sagen, dass ich diese Funktion habenRufen Sie in JavaScript

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

nun mehrere Male mit verschiedenen Argumenten jedes Mal, wenn ich es nennen wollen:

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

Wie kann ich alle diese Anrufe in nur einem zusammenführen?

Ich weiß, wie es mit Iterationen oder forEach zu tun, wenn es nur ein Argument gibt, aber ich kann nicht herausfinden, wie es mit verschiedenen nicht-numerischen Argumente zu tun.

+1

, die auf Ihrem Parametern abhängt, werden sie in einem Array gespeichert? basieren sie auf Benutzereingaben? Kannst du etwas mehr Kontext geben? – Roberrrt

+1

* "Wie kann ich alle diese Anrufe in nur einem zusammenführen?" * Das kann nicht, wenn Sie einen einzelnen Aufruf von 'myFunction' meinen, nicht ohne zu ändern, wie' myFunction' funktioniert. Abhängig davon, woher die Werte kommen, können Sie sicher eine Schleife verwenden, um nur einen einzigen Aufruf von 'myFunction' zu * codieren *. –

Antwort

3

Sofern Sie myFunction ändern, können Sie es nicht einmal aufrufen können und haben es auf magische Weise, als ob sie handeln war fünfmal angerufen worden.

Sie können Code einen einzigen Aufruf in einer Schleife, wenn die Informationen, die Sie für die Argumente verwenden, an anderer Stelle gespeichert ist.

Zum Beispiel, wenn wir eine Reihe von objets annehmen:

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

dann

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

Oder wenn es ein Array von Arrays ist, können wir die raffinierte Function#apply Funktion:

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

dann:

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

Obwohl alle Antworten sehr hilfreich waren, fühlte ich, dass diese die vollständigste war. Danke euch allen. :) – Stealth

2

Sie scheinen für 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); }) 

oder spread syntax in ES6 zu suchen:

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

lässt vermuten Sie bereits ein Array mit allen Werten:

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 
 
}