Reputation: 4278
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
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
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
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
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
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