web-dev-qa-db-fra.com

Conversion d'un tableau en une liste d'arguments de fonction

Est-il possible de convertir un tableau en JavaScript en une séquence d'arguments de fonctions? Exemple:

run({ "render": [ 10, 20, 200, 200 ] });

function run(calls) {
  var app = .... // app is retrieved from storage
  for (func in calls) {
    // What should happen in the next line?
    var args = ....(calls[func]);
    app[func](args);  // This is equivalent to app.render(10, 20, 200, 200);
  }
}
231
dpq

Oui. Dans les versions actuelles de JS, vous pouvez utiliser:

app[func]( ...args );

Les utilisateurs de ES5 et plus âgés devront utiliser la méthode .apply():

app[func].apply( this, args );

Lisez ces méthodes sur MDN:

279
shuckster

Un exemple très lisible d'un autre article sur un sujet similaire:

var args = [ 'p0', 'p1', 'p2' ];

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

// Calling the function using the array with apply()
call_me.apply(this, args);

Et ici un lien vers le message original que j'ai personnellement aimé pour sa lisibilité

119
Wilt
app[func].apply(this, args);
24
Eric Anderson

Vous voudrez peut-être jeter un oeil à un question similaire posté sur Stack Overflow. Il utilise la méthode .apply() pour accomplir cela.

12
JJ Geewax

@bryc - oui, vous pouvez le faire comme ceci:

Element.prototype.setAttribute.apply(document.body,["foo","bar"])

Mais cela semble être beaucoup de travail et de confusion par rapport à:

document.body.setAttribute("foo","bar")
1
user1527225