Diese Anzeige ist nur für
Nicht-Mitglieder sichtbar!

Jetzt kostenlos registrieren

Funktionsref. aus String erstellen bzw. dyn. array.sort()

Fragen zum Thema JavaScript können hier gestellt werden

Moderatoren: Basti, Guillermo, Ingo

Funktionsref. aus String erstellen bzw. dyn. array.sort()

Beitragvon Psai am 07.09.2011, 16:50

Hallo,

ich bin scheinbar auf ein seltenes Problem gestoßen, da ich dazu bisher nichts gefunden habe.
Und zwar möchte ich ein komplexes Array je nach Useraktion nach anderen Kriterien sortieren.
Ich weiß, prinzipiell geht es so, dass man eine eigene Vergleichsmethode schreibt und diese der array.sort() übergibt. Quasi:

Code: Alles auswählen
function sort_by_abc(){...}
myarray = ...;
myarray.sort(sort_by_abc);


So, bei mir hängt das abc allerdings von einer Variablen ab, die da heißt: sort_type. Da steht z. B. drin "title", "date", "type" etc.
Jetzt müsste ich die Funktionsreferenz in .sort() (das ist doch eine, oder? 100% sicher bin ich mir mit den Begrifflichkeiten hier leider noch nicht) dynamisch zusammenbauen. In etwa so:

Code: Alles auswählen
myarray.sort("sort_by_" + sort_type);


Geht natürlich nicht, weil das dann der falsche Typ ist (String statt Funkt.referenz). Ich hab auch schon mit der window[funktionsname]()-Methode rumprobiert. Ich vermute aber, dass sich damit nur reine Funktionen aufrufen lassen, aber keine Referenzen.

Weiß jemand, wie man sowas bewerkstelligen kann?

Gruß,
Andy

EDIT: Okay, hat sich erledigt. myarray.sort(window[functrefname]); funktioniert doch. Ich benutze einen HTML-Editor, der Dateien automatisch beim Speichern auf einen FTP-Server lädt. Scheinbar hat er das eine Mal nur zu lange gebraucht oder ich war zu schnell mit der Überprüfung. Entschuldigt vielmals die Störung! ;)
Psai
Mitglied
 
Beiträge: 202
Registriert: 27.04.2011, 15:48
Diese Anzeige ist nur für
Nicht-Mitglieder sichtbar!
 
Jetzt kostenlos registrieren

Re: Funktionsref. aus String erstellen bzw. dyn. array.sort(

Beitragvon my-webdesigner.com am 07.09.2011, 17:27

Das Problem ist gar nicht so selten, aber es gibt schönere Lösungen als Funktionsreferenzbezeichner dynamisch zu benutzen.

Verwende doch ein Objekt als Funktionssammlung:
Code: Alles auswählen
var mysort = {
    abc: function() {
        // Sortiere
    },
    xyz: function() {
        // Sortiere anders
    }
};


Der Aufruf sieht dann wie folgt aus:
Code: Alles auswählen
var sortType = "xyz";
myarray.sort(mysort[sortType]);
Benutzeravatar
my-webdesigner.com
Mitglied
 
Beiträge: 656
Registriert: 20.04.2010, 12:42
Wohnort: Wien

Re: Funktionsref. aus String erstellen bzw. dyn. array.sort(

Beitragvon Psai am 08.09.2011, 02:11

Oh, vielen Dank. Diese Methode ist wirklich chic!

Vielleicht finde ich deswegen nichts passendes, weil ich so an meinem Weg, ein Problem zu lösen, hänge und genau dafür eine Lösung suche.

Ich glaube, ich sollte generell mehr mit Klassen und Objekten arbeiten. Derzeit erstelle ich nur einzelne Funktionen und ruf die an gewünschter Stelle auf.. (Erinnert mich daran, dass mich ein Lehrer darauf hingewiesen hat, dass ich von der Denkweise ein typischer C-Programmierer bin :D)
Psai
Mitglied
 
Beiträge: 202
Registriert: 27.04.2011, 15:48

Re: Funktionsref. aus String erstellen bzw. dyn. array.sort(

Beitragvon my-webdesigner.com am 08.09.2011, 23:21

Kein Problem ;)

Linearer Code mal schnell ab und zu ist auch ok, aber diese Objekte haben es wirklich drauf :mrgreen:
Benutzeravatar
my-webdesigner.com
Mitglied
 
Beiträge: 656
Registriert: 20.04.2010, 12:42
Wohnort: Wien

Re: Funktionsref. aus String erstellen bzw. dyn. array.sort(

Beitragvon Psai am 07.01.2012, 20:52

ich.. glaube schon, ja. Is schon etwas her.
Psai
Mitglied
 
Beiträge: 202
Registriert: 27.04.2011, 15:48


Zurück zu JavaScript

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast