He estado buscando por un tiempo, y parece que no puedo encontrar la respuesta para esto. No sé si es posible, pero tengo curiosidad.

Supongamos que tengo una función simple:
function foo(name){alert(name);}

Supongamos también que tengo que invocar esta función varias veces con varios nombres diferentes:
foo("bar"); foo("blahh"); foo("myName"); foo("yourName");

¿Hay una abreviatura para esto?

Por ejemplo: foo("bar":"blahh":"myName":"yourName");

Este ejemplo es trivial, pero en la práctica ese director podría ser muy útil. Si hay algún tipo de solución jQuery, estoy abierto a eso también.

3
richsoni 30 jun. 2011 a las 19:54

5 respuestas

La mejor respuesta

Como generalización de otras respuestas:

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

Esto agregará el método sequence a todas las funciones. Para que pueda usarlo con cualquier función:

function foo() {....}

foo.sequence(["bar","blah","myName","yourName"]);
5
c-smile 30 jun. 2011 a las 16:08

En realidad, podrías hacer algo como esto:

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

Y luego puedes llamarlo con tantos argumentos como quieras:

foo('miao', 'baw');

// alerta a miao y luego grita

2
Nicola Peluchetti 30 jun. 2011 a las 16:07

Piense en la tarea como aplicando cada elemento en una secuencia, a su vez, a la función dada . En jQuery esto se puede hacer como:

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

La función adicional es necesaria porque la jQuery.each se devuelve el índice y el valor como parámetros. Sería bueno si el valor fuera primero :(

Compare con (una función foo modificada):

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

Feliz codificación

3
user166390user166390 30 jun. 2011 a las 15:56

Puede poner sus parámetros en una matriz e iterar a través de ella:

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

Si el func toma varios argumentos, puede colocar matrices en las matrices:

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

O

params = [[1,"one"], [2,"two"], [5,"five"]];
for (var i=0; i<params.length; i++) 
    foobar.apply(null, params[i]);
6
Claudiu 30 jun. 2011 a las 15:56

Podría pasar una matriz a la función:

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

foo(["bar","blah","myName","yourName"]);
2
marchaos 30 jun. 2011 a las 15:57