richsoni
richsoni

Reputation: 4278

Javascript invoking a function multiple times shorthand

I have been looking around for a while, and cant seem to find the answer for this. I do not know if it is possible, but am just curious.

Suppose I have a simple function:
function foo(name){alert(name);}

Also suppose that I have to invoke this function several times with several different names:
foo("bar"); foo("blahh"); foo("myName"); foo("yourName");

Is there a shorthand for this?

For Example:foo("bar":"blahh":"myName":"yourName");

This example is trivial, but in practice that principal could be very useful. If there is some kind of jQuery solution I am open to that as well.

Upvotes: 3

Views: 2711

Answers (5)

c-smile
c-smile

Reputation: 27460

As a generalization of other answers:

Function.prototype.sequence = function(vals) {
   for (var i = 0; i < vals.length; ++i) this(vals[i]);
}

this will add the sequence method to all functions. So you can use it with any function:

function foo() {....}

foo.sequence(["bar","blah","myName","yourName"]);

Upvotes: 5

Nicola Peluchetti
Nicola Peluchetti

Reputation: 76880

Actually you could do something like this:

function foo(){
for (var i=0; i< arguments.length; i++){
         alert(arguments[i]);
     }
}

and then you can call it with as many arguments you like:

foo('miao', 'baw');

//alerts miao and then baw

Upvotes: 2

marchaos
marchaos

Reputation: 3444

You could pass an array to the function:

function foo(vals) {
   for (var i = 0; i < vals.length; ++i) {
       alert(vals[i]); 
   }
}

foo(["bar","blah","myName","yourName"]);

Upvotes: 2

user166390
user166390

Reputation:

Think of the task as applying each element in a sequence, in turn, to the given function. In jQuery this can be done as:

function foo(name){ alert(name) }
$.each(["bar","blah","myName","yourName"], function (index, value) {
   foo(value)
})

The extra function is required because the jQuery.each callback is passed the index and value as parameters. It would be nice if the value was first :(

Compare with (a modified foo function):

function foo(index, name){ alert(name) }
$.each(["bar","blah","myName","yourName"], foo)

Happy coding.

Upvotes: 3

Claudiu
Claudiu

Reputation: 229361

You could put your parameters in an array and iterate through it:

params = ["bar", "blahh", "myName", "yourName"];
for (var i=0; i<params.length; i++) 
    foo(params[i]);

If the func takes multiple args, you can put arrays in the arrays:

params = [[1,"one"], [2,"two"], [5,"five"]];
for (var i=0; i<params.length; i++) 
    foobar(params[i][0], params[i][1]);

or

params = [[1,"one"], [2,"two"], [5,"five"]];
for (var i=0; i<params.length; i++) 
    foobar.apply(null, params[i]);

Upvotes: 7

Related Questions