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

Jetzt kostenlos registrieren

Mehrdim. Array + unbek. Größe + Indexzugriff

Fragen zum Thema JavaScript können hier gestellt werden

Moderatoren: Basti, Guillermo, Ingo

Mehrdim. Array + unbek. Größe + Indexzugriff

Beitragvon Psai am 26.12.2011, 00:03

Hallo zusammen,

bin gerade am Arbeiten an einer Webanwendung. Es handelt sich um eine Art Quiz (Schulprojekt). Dabei stehe ich jetzt vor einem scheinbar recht speziellen Problem.

Ich habe ein Array "mcstore.aktuell.antworten[]". In diesem repräsentiert jede Frage aus dem Quiz ein Element.
Jedes solche Element enthält je ein weiteres Element pro auswählbare Antwortmöglichkeit.
Dort wird "1" gespeichert, wenn der Benutzer die Antwort angeklickt hat. Ansonsten "0". (vllt. mach ich noch true/false daraus)

Ich weiß natürlich nicht, wie viele Fragen und Antworten das jeweilige Quiz hat, das vom User gestartet wird, daher kann ich keine Größe beim Anlegen festlegen. Andererseits soll das Array laufend erhalten bleiben. Die Anwendung läuft vollständig mit Ajax, also wird die Seite nicht neu geladen.

Versuch ich jetzt per Index (Nummer der Frage und Nummer der jeweiligen Antwort - bsp.: mcstore.aktuell.antworten[2][1]) einen Wert zu setzen, bekomm ich die Fehlermeldung, dass man den Wert von undefined nicht setzen kann.
Erstelle ich das Array dynamisch in der Verarbeitung, klappts zwar. Aber nach Ablauf der Funktion ist dieses Array wieder leer! Und das obwohl das komplette mcstore-Objekt eigentlich global ist. Andere Werte werden dort drin auch einwandfrei gespeichert.

Aufgerufen wird das Ganze beim Wechseln der Frage. Also überleben die Werte den Wechsel von Frage 1 zu Frage 2 nicht.

Kann jemand dieses Problem nachvollziehn und mir einen Ansatz geben, wie ich dieses Problem lösen kann?

Gruß
Andreas
Psai
Mitglied
 
Beiträge: 202
Registriert: 27.04.2011, 15:48
Diese Anzeige ist nur für
Nicht-Mitglieder sichtbar!
 
Jetzt kostenlos registrieren

Re: Mehrdim. Array + unbek. Größe + Indexzugriff

Beitragvon Guillermo am 26.12.2011, 17:12

Hi Andreas,

nach Ablauf welcher Funktion ist das Array leer?
Du könntest um Arrays zu umgehen z.B. eine Verkettete Liste verwenden. Du hast z.B. eine Klasse die Eine Antwort repräsentiert. Die Eigenschaften dieser Klasse sind der Antworttext und ob die Antwort markiert / vom Benutzer ausgewählt wurde. Außerdem brauchst du einen Verweis auf das nächste Element. Du kannst so von einem Element zum anderen gehen und Werte verändern (http://de.wikipedia.org/wiki/Liste_(Datenstruktur)#Einfach_verkettete_Liste).
Hast du ein paar Quelltextauszüge? Dann können wir dir sicherlich besser weiterhelfen.

Viele Grüße,
Guillermo
Gebildet ist der, der weiß, wo er findet, was er nicht weiß.
Benutzeravatar
Guillermo
Moderator
 
Beiträge: 1093
Registriert: 01.10.2007, 18:18
Wohnort: Bayern

Re: Mehrdim. Array + unbek. Größe + Indexzugriff

Beitragvon Psai am 27.12.2011, 21:58

Hi Guillermo,

der Fehler ist jetzt gefunden. Ich weiß leider nicht, was ich mir dabei gedacht hab, das frisch angelegte Array gleich nach der Befüllung mit Daten mit einem Leerstring zu überschreiben......
Code: Alles auswählen
/* Schleife */
mcstore.aktuell.antworten[mcstore.aktuell.fragen.aktuell] = "";
/* ... */

...vielleicht war es als Initialisierung gedacht und ich hab nur an der falschen Stelle weitergeschrieben.

Das mit den verketteten Listen interessiert mich jetz aber schon, da ich eh noch auf der Suche nach einem Weg bin, meinen JS-Code zu "optimieren". Ich kenn verkettete Listen sehr gut ausm C-Unterricht (FH und Berufsfachschule ;) ), aber in JS hab ich daran noch gar nicht gedacht.

Da müsste ich aber doch durch die Kette wandern und zu jeder Antwort das entsprechende HTML-Element auf Selektion überprüfen, oder?
Bisher durchlaufe ich die Elemente nämlich von der "anderen Seite" (die Seite der HTML-Elemente) mit folgender jQuery-Schleife:
Code: Alles auswählen
mcstore.aktuell.antworten[mcstore.aktuell.fragen.aktuell] = Array();
$("section#content article .answer").each(function(index){
    if($(this).hasClass("selected")){
        mcstore.aktuell.antworten[mcstore.aktuell.fragen.aktuell][index] = 1;
    } else{
        mcstore.aktuell.antworten[mcstore.aktuell.fragen.aktuell][index] = 0;
    }
});
// mcstore.aktuell.fragen.aktuell ist die Nummer der aktuellen Frage

Zur Ergänzung, falls es hilft. Das Antworten-Array ist folgendermaßen deklariert:
Code: Alles auswählen
// Nur ein Auszug
var mcstore = {
    aktuell: {
        antworten: Array()
    }
};


Nun ja.. wie gesagt, das eigentliche Problem hat sich bereits erledigt.
Psai
Mitglied
 
Beiträge: 202
Registriert: 27.04.2011, 15:48

Re: Mehrdim. Array + unbek. Größe + Indexzugriff

Beitragvon Guillermo am 29.12.2011, 19:36

Hi Andreas,

in deinem Fall eignet sich die Arrayvariante wohl wirklich besser. Verkettete Listen machen hier wohl nicht sehr viel Sinn da man sich dadurch keinen wirklichen Vorteil verschafft.

Viele Grüße,
Guillermo
Gebildet ist der, der weiß, wo er findet, was er nicht weiß.
Benutzeravatar
Guillermo
Moderator
 
Beiträge: 1093
Registriert: 01.10.2007, 18:18
Wohnort: Bayern


Zurück zu JavaScript

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast