Converting an array to a function arguments list [duplicate]

Converting an array to a function arguments list [duplicate]

This question already has an answer here:

Passing an array as a function parameter in JavaScript

10 answers

Is it possible to convert an array in JavaScript into a function argument sequence? Example:
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);
}
}

Solutions/Answers:

Solution 1:

Yes. In current versions of JS you can use:

app[func]( ...args );

Users of ES5 and older will need to use the .apply() method:

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

Read up on these methods at MDN:

Solution 2:

A very readable example from another post on similar topic:

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

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

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

And here a link to the original post that I personally liked for its readability

Related:  semantic-ui dropdown menu do not work

Solution 3:

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

Solution 4:

You might want to take a look at a similar question posted on Stack Overflow. It uses the .apply() method to accomplish this.

Solution 5:

@bryc – yes, you could do it like this:

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

But that seems like a lot of work and obfuscation compared to:

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