• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

JavaScript: Array-Elemente als Parameter an eine Funktion übergeben

Bief

Weigelts Zinszahler (Rotfranch)
Registriert
11.12.06
Beiträge
249
Hi Leute,

ich hab ma ne Frage zu JavaScript.
Und zwar gibt es ja die Möglichkeit über das arguments-Array auf alle Parameter die der Funktion gegeben wurden zuzugreifen.
Aber is es auch möglich diese Parameter, also die einzelnen Array-Elemente, genau so an eine andere Funktion weiterzugeben, unabhängig davon, wie groß das Array ist?

Das ganze sollte ohne eval gehen, da das auch mit anonymen Funktionen funktionieren sollte...

Danke an alle Helfer ;)

Bief
 

Bief

Weigelts Zinszahler (Rotfranch)
Registriert
11.12.06
Beiträge
249
Kennt sich hier niemand damit aus?
 

Chu

Martini
Registriert
15.06.07
Beiträge
658
versuch dein problem mal genauer zu definieren aber grundsätzlich kannst du ja array elemnte mit mit x übergeben..
 

Bief

Weigelts Zinszahler (Rotfranch)
Registriert
11.12.06
Beiträge
249
Also ich hab ein Array, ich nenns mal someArguments.
In diesem Array sind zwischen 0 und "unendlich" Elemente (also beliebig viele, das weiß ich vorher halt nicht).

Und wenn jetzt ein bestimmtes Ereignis eintritt, z.B. ein Timeout ist abgelaufen, dann soll eine bestimmte Funktion aufgerufen werden und dabei jedes Element von someArguments als ein einzelner Parameter übergeben werden.

Bsp.:
Code:
var someArguments = [var1, var2, var3];
function somethingHappened() {
   aFunction(someArguments[0], someArguments[1], someArguments[2]);
}

Gäbe es noch var4, dann müsste man in in der Parameterliste von aFunction noch someArguments[3] anhängen, ...
Also das da oben, soll dynamisch passieren, aber ohne eval (damit wärs ja auch kein Problem).
 

Chu

Martini
Registriert
15.06.07
Beiträge
658
ich würde deine afunction auf einen übergabeparameter umbasteln
Code:
for(i = 0; i <= someArguments.length-1;i++){
    afunction(someArguments[i]);
}


oder eben als array das du das array übergibst
Code:
afunction(someArguments)
 

Bief

Weigelts Zinszahler (Rotfranch)
Registriert
11.12.06
Beiträge
249
Schonmal Danke für die Vorschläge!

ich würde deine afunction auf einen übergabeparameter umbasteln
Code:
for(i = 0; i <= someArguments.length-1;i++){
    afunction(someArguments[i]);
}

Dann wird die Funktion someArguments.length - mal mit je einem Parameter aufgerufen, aber nicht einmal mit allen parametern.


oder eben als array das du das array übergibst
Code:
afunction(someArguments)

So hab ichs bis jetzt gelöst... Aber anders scheint es nicht zu funktionieren...
Ich wollte das so, wie man das bei einem window.setTimeout() machen kann, also nach delay und function einfach beliebige parameter übergeben, die dann beim "Auslösen" des Timeouts an die function übergeben werden... (um nochmal das Problem darzustellen).
 

Chu

Martini
Registriert
15.06.07
Beiträge
658
ok gut wenns geklappt hat ;)

Das mit den einzelnen Parametern habe ich deshalb vorgeschlagen weil ich ja nicht weiß, was deine afunction berechnet :)
 

Bief

Weigelts Zinszahler (Rotfranch)
Registriert
11.12.06
Beiträge
249
Das mit den einzelnen Parametern habe ich deshalb vorgeschlagen weil ich ja nicht weiß, was deine afunction berechnet :)

Das soll ja auch so allgemein sein... Das sollte eigentlich mit jeder Funktion zusammenarbeiten...
Im Moment kann man die Funktion bestimmen und eine weitere optionale Variable... Da die Variable ja alles sein kann, kann ich mehrere Infos auch in einem Array speichern... Das ist zwar komplizierter, aber wenns nicht anders geht...

Ich schätze mal, so wie ich das will, ist es einfach unmöglich, es sei denn ich mache es mit eval, aber das ist nicht unbedingt die eleganteste Lösung...
 

Chu

Martini
Registriert
15.06.07
Beiträge
658
Das soll ja auch so allgemein sein... Das sollte eigentlich mit jeder Funktion zusammenarbeiten...
Im Moment kann man die Funktion bestimmen und eine weitere optionale Variable... Da die Variable ja alles sein kann, kann ich mehrere Infos auch in einem Array speichern... Das ist zwar komplizierter, aber wenns nicht anders geht...

Ich schätze mal, so wie ich das will, ist es einfach unmöglich, es sei denn ich mache es mit eval, aber das ist nicht unbedingt die eleganteste Lösung...

Also wenn du, wie ich es gerade verstehe, mathematische Funktionen ausrechnen willst wird das mit eval schwierig da er kein sin(x),cos,exp.. sowie ^2 oder sonstige Mathematischen ergebnisse berechnen kann. Dafür müsstest du einen Parser schreiben der dir das übergebene auseinandernimmt und ausrechnet. Dafür brauchst du die String-funktionen (http://de.selfhtml.org/javascript/objekte/string.htm) aus Java und solltest evtl vorher ein regexp ( http://de.selfhtml.org/javascript/objekte/regexp.htm ) abfragen
 

Bief

Weigelts Zinszahler (Rotfranch)
Registriert
11.12.06
Beiträge
249
Ne, das muss net unbedingt sein... Wenn, dann würde das sowieso in aFuntion ausgerechnet werden.
So wie das bei window.setTimeout(delay, aFuntion, variable1, variable2, variable3, ..., variableN) der Fall ist, so sollte es eigentlich auch bei mir funktionieren.
Und für eval bräuchte ich ja einen String, von den Variablenwerten, dass is bei Zahlen, Strings und Arrays kein Problem, aber leider bei anderen Objekten, wie bspweise document.body ö.Ä..
 

bezierkurve

Halberstädter Jungfernapfel
Registriert
12.06.05
Beiträge
3.860
Verstehe ich dich richtig, dass du die Anzahl der Parameter variabel halten willst? Das geht so …:
Code:
function foo() {

	alert("Anzahl Parameter: " + foo.arguments.length);
	
	for (i = 0; i < foo.arguments.length; i++)
		alert(foo.arguments[i]);
}

foo("eins","zwei","drei");
 

Bief

Weigelts Zinszahler (Rotfranch)
Registriert
11.12.06
Beiträge
249
Nein. Ich möchte foo.arguments an eine andere Funktion "weiterleiten".
foo.arguments wäre ja: Parameter => Array, aber ich möchte Array => Parameter...

Also die Elemente des Arrays, sollen alle nacheinander an eine andere Funktion übergeben werden.

In etwa so ;):
Code:
for (i = 0; i < foo.arguments.length; i++) {
   magicObject.addParameter(foo.arguments[i]);
}
magicObject.callFunctionWithArguments(aFunction);