1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

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

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von Bief, 10.11.08.

  1. Bief

    Bief Weigelts Zinszahler (Rotfranch)

    Dabei seit:
    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
     
  2. Bief

    Bief Weigelts Zinszahler (Rotfranch)

    Dabei seit:
    11.12.06
    Beiträge:
    249
    Kennt sich hier niemand damit aus?
     
  3. Chu

    Chu Martini

    Dabei seit:
    15.06.07
    Beiträge:
    659
    versuch dein problem mal genauer zu definieren aber grundsätzlich kannst du ja array elemnte mit mit x übergeben..
     
  4. Bief

    Bief Weigelts Zinszahler (Rotfranch)

    Dabei seit:
    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).
     
  5. Chu

    Chu Martini

    Dabei seit:
    15.06.07
    Beiträge:
    659
    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)
    
     
  6. Bief

    Bief Weigelts Zinszahler (Rotfranch)

    Dabei seit:
    11.12.06
    Beiträge:
    249
    Schonmal Danke für die Vorschläge!

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


    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).
     
  7. Chu

    Chu Martini

    Dabei seit:
    15.06.07
    Beiträge:
    659
    ok gut wenns geklappt hat ;)

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

    Bief Weigelts Zinszahler (Rotfranch)

    Dabei seit:
    11.12.06
    Beiträge:
    249
    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...
     
  9. Chu

    Chu Martini

    Dabei seit:
    15.06.07
    Beiträge:
    659
    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
     
  10. Bief

    Bief Weigelts Zinszahler (Rotfranch)

    Dabei seit:
    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 ö.Ä..
     
  11. bezierkurve

    bezierkurve Danziger Kant

    Dabei seit:
    12.06.05
    Beiträge:
    3.861
    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");
    
     
  12. Bief

    Bief Weigelts Zinszahler (Rotfranch)

    Dabei seit:
    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);
    
     

Diese Seite empfehlen