Fehler: ..... has no properties
enrico
- javascript
Guten Abend,
ich komme bei der Beseitigung der folgenden Fehlermeldung einfach nicht weiter:
Fehler: Temp_Temp[i] has no properties
Hier die Funktion und - markiert - die mir ausgegebene, fehlerhafte Zeile:
function Filtern(Temp)
{
var Kriterium_Anfangsbuchstabe = window.document.getElementById ("Anfangsbuchstabe").value;
var Kriterium_Genre = window.document.getElementById ("Genre").value;
var Kriterium_FSK = window.document.getElementById ("FSK").value;
var Temp_Temp = new Array();
if (Anfangsbuchstabe != "")
{
for (var i = 0; i < Temp.length; i++)
{
Anfangsbuchstabe = Temp[i]["Titel"].substring (0,1);
if (Anfangsbuchstabe == Kriterium_Anfangsbuchstabe)
{
Temp_Temp[i] = new Object();
Temp_Temp[i]["Nr"] = Temp[i]["Nr"];
Temp_Temp[i]["Titel"] = Temp[i]["Titel"];
Temp_Temp[i]["Inhalt"] = Temp[i]["Inhalt"];
Temp_Temp[i]["Genre"] = Temp[i]["Genre"];
Temp_Temp[i]["FSK"] = Temp[i]["FSK"];
}
}
Temp = new Array();
for (var i = 0; i < Temp_Temp.length; i++)
{
Temp[i] = new Object();
-----> Temp[i]["Nr"] = Temp_Temp[i]["Nr"]; <-----
Temp[i]["Titel"] = Temp_Temp[i]["Titel"];
Temp[i]["Inhalt"] = Temp_Temp[i]["Inhalt"];
Temp[i]["Genre"] = Temp_Temp[i]["Genre"];
Temp[i]["FSK"] = Temp_Temp[i]["FSK"];
}
}
.....
}
Ich übergebe der Funktion "Filtern" ein zweidimensionales Array, die Werte der Variablen
Variablen Kriterium_..... stammen aus versteckten Eingabefeldern, die Übergabe und das
Einlesen klappen.
Ich habe das Array "Temp_Temp" eingerichtet und mit "new Object" erweitert.
Warum bekomme ich obige Fehlermeldung ?
Vielen Dank im Voraus.
Viele Grüße
Enrico
Hallo,
Ich übergebe der Funktion "Filtern" ein zweidimensionales Array, die Werte der Variablen ...
es ist wohl eher ein eindimensionale Array mit Objekten als Elemente.
wenn du nun ein Objekt kopierst, warum dann nicht:
neues_object = altes_object.
kennst du das http://de.selfhtml.org/javascript/objekte/array.htm@title=Array-Kapitel?
auch wenn man solche Abfragen närrisch findet, bleibe ich dabei:
for (var i = 0; i < Temp_Temp.length; i++) {
if ( ! Temp_Temp[i]) alert( "Temp_Temp[i] existiert nicht - i: "+i);
Temp[i] = Temp_Temp[i];
}
das beseitigt zwar nicht den Fehler, gibt dir aber evtl. den nötigen Hinweis.
Gruß plan_B
Hallo plan_B,
ich habe Deinen Rat beherzigt und folgende Ausgaben eingebaut:
if (Kriterium_Anfangsbuchstabe != "")
{
var Temp_Temp = new Array();
for (var i = 0; i < Temp.length; i++)
{
Anfangsbuchstabe = Temp[i]["Titel"].substring (0,1);
if (Anfangsbuchstabe == Kriterium_Anfangsbuchstabe)
{
Temp_Temp[i] = new Object();
Temp_Temp[i]["Nr"] = Temp[i]["Nr"];
Temp_Temp[i]["Titel"] = Temp[i]["Titel"];
Temp_Temp[i]["Inhalt"] = Temp[i]["Inhalt"];
Temp_Temp[i]["Genre"] = Temp[i]["Genre"];
Temp_Temp[i]["FSK"] = Temp[i]["FSK"];
}
}
Temp = new Array();
for (var i = 0; i < Temp_Temp.length; i++)
{
alert ("Länge von 'Temp_Temp': " + Temp_Temp.length);
<-----+
if (!Temp_Temp[i]) |
{ |
alert ("Temp_Temp[i] existiert nicht - i: " + i); |
} |
<-----+
Temp[i] = new Object();
Temp[i]["Nr"] = Temp_Temp[i]["Nr"];
Temp[i]["Titel"] = Temp_Temp[i]["Titel"];
Temp[i]["Inhalt"] = Temp_Temp[i]["Inhalt"];
Temp[i]["Genre"] = Temp_Temp[i]["Genre"];
Temp[i]["FSK"] = Temp_Temp[i]["FSK"];
}
}
Ich bekomme als Länge für Temp_Temp den Wert 25 ausgegeben und 0 als Wert
für das existierende Element von Temp_Temp, was mir sagt, dass das Array
Temp_Temp doch an und für sich richtig erzeugt worden sein müsste, oder
liege ich hier falsch?
Gruß,
Enrico
Ich bekomme als Länge für Temp_Temp den Wert 25 ausgegeben und 0 als Wert
für das existierende Element von Temp_Temp, was mir sagt, dass das Array
Temp_Temp doch an und für sich richtig erzeugt worden sein müsste, oder
liege ich hier falsch?
Nein, aber welche Elemente existieren nicht?
Es sieht eher so aus, als ob deine Programmierlogik falsch ist.
Ich nehme an, du wilst hier:
if (Anfangsbuchstabe == Kriterium_Anfangsbuchstabe)
{
Temp_Temp[i] = new Object();
Temp_Temp[i]["Nr"] = Temp[i]["Nr"];
Temp_Temp[i]["Titel"] = Temp[i]["Titel"];
Temp_Temp[i]["Inhalt"] = Temp[i]["Inhalt"];
Temp_Temp[i]["Genre"] = Temp[i]["Genre"];
Temp_Temp[i]["FSK"] = Temp[i]["FSK"];
}
Nicht i verwenden, sondern push.
Temp_Temp.push( {
Nr: Temp[i]["Nr"],
Titel: Temp[i]["Titel"],
...
});
Struppi.
Hi,
Es sieht eher so aus, als ob deine Programmierlogik falsch ist.
Ich nehme an, du wilst hier:
if (Anfangsbuchstabe == Kriterium_Anfangsbuchstabe)
{
Temp_Temp[i] = new Object();
Temp_Temp[i]["Nr"] = Temp[i]["Nr"];
Temp_Temp[i]["Titel"] = Temp[i]["Titel"];
Temp_Temp[i]["Inhalt"] = Temp[i]["Inhalt"];
Temp_Temp[i]["Genre"] = Temp[i]["Genre"];
Temp_Temp[i]["FSK"] = Temp[i]["FSK"];
}
>
> Nicht i verwenden, sondern push.
Lustig - schon wieder das gleiche, wie hier </archiv/2008/4/t169548/>
MfG ChrisB
Nicht i verwenden, sondern push.
Lustig - schon wieder das gleiche, wie hier </archiv/2008/4/t169548/>
Ist ja PHP, also was ganz anderes ;-)
Struppi.
Hallo Struppi,
Menschenskinder, genau, "push" ist die Lösung... :-))
Jetzt bekomme ich zumindest keine Fehlermeldung mehr, das ist schon was.
So, jetzt habe ich nur noch das Problem zu lösen, dass ich die Filterung noch nicht wie gewünscht hinbekomme.
Ich habe die Möglichkeit vorgesehen, meine Sammlung anhand maximal dreier Kriterien filtern zu lassen:
-anhand des Anfangsbuchstaben der Titel
-anhand des Genres
-anhand der Altersfreigabe
Von der Logik müsste es wie folgt umgesetzt werden:
Prüfung 1: Kriterium für Anfangsbuchstaben gesetzt ?
Ja:
-Array "Temp" komplett durchlaufen und bei Übereinstimmung in Array "Temp_Temp" überspielen
-Array "Temp_Temp" in's Array Temp zurückspielen und Länge "Temp" um letztes Element + 1 bis
zum Ende ( = Länge "Temp_Temp") reduzieren
Nein: Weiter mit Prüfung 2
Prüfung 2: Kriterium für Genre gesetzt ?
Ja:
-Array "Temp" komplett durchlaufen und bei Übereinstimmung in Array "Temp_Temp" überspielen
-Array "Temp_Temp" in's Array Temp zurückspielen und Länge "Temp" um letztes Element + 1 bis
zum Ende ( = Länge "Temp_Temp") reduzieren
Nein:
Weiter mit Prüfung 3
Prüfung 3: Kriterium für Altersfreigabe gesetzt ?
Ja:
-Array "Temp" komplett durchlaufen und bei Übereinstimmung in Array "Temp_Temp" überspielen
-Array "Temp_Temp" in's Array Temp zurückspielen und Länge "Temp" um letztes Element + 1 bis
zum Ende ( = Länge "Temp_Temp") reduzieren
Nein: keine Aktion
Meine Funktion sieht nun wie folgt aus (für alle drei Filtermöglichkeiten):
function Filtern(Temp)
{
var Kriterium_Anfangsbuchstabe = window.document.getElementById ("Anfangsbuchstabe").value;
var Kriterium_Genre = window.document.getElementById ("Genre").value;
var Kriterium_FSK = window.document.getElementById ("FSK").value;
if (Kriterium_Anfangsbuchstabe != "")
{
var Temp_Temp = new Array();
for (var i = 0; i < Temp.length; i++)
{
Anfangsbuchstabe = Temp[i]["Titel"].substring (0,1);
if (Anfangsbuchstabe == Kriterium_Anfangsbuchstabe)
{
Temp_Temp.push({
Nr: Temp[i]["Nr"],
Titel: Temp[i]["Titel"],
Inhalt: Temp[i]["Inhalt"],
Genre: Temp[i]["Genre"],
FSK: Temp[i]["FSK"],
});
}
}
for (var i = 0; i < Temp_Temp.length; i++)
{
Temp.push({
Nr: Temp_Temp[i]["Nr"],
Titel: Temp_Temp[i]["Titel"],
Inhalt: Temp_Temp[i]["Inhalt"],
Genre: Temp_Temp[i]["Genre"],
FSK: Temp_Temp[i]["FSK"],
});
}
Temp.splice (0, Temp_Temp.length);
}
if (Kriterium_Genre != "")
{
var Temp_Temp = new Array();
for (var i = 0; i < Temp.length; i++)
{
if (Temp[i]["Genre"] == Kriterium_Genre)
{
Temp_Temp.push({
Nr: Temp[i]["Nr"],
Titel: Temp[i]["Titel"],
Inhalt: Temp[i]["Inhalt"],
Genre: Temp[i]["Genre"],
FSK: Temp[i]["FSK"],
});
}
}
for (var i = 0; i < Temp_Temp.length; i++)
{
Temp.push({
Nr: Temp_Temp[i]["Nr"],
Titel: Temp_Temp[i]["Titel"],
Inhalt: Temp_Temp[i]["Inhalt"],
Genre: Temp_Temp[i]["Genre"],
FSK: Temp_Temp[i]["FSK"],
});
}
Temp.splice (0, Temp_Temp.length);
}
if (Kriterium_FSK != "")
{
var Temp_Temp = new Array();
for (var i = 0; i < Temp.length; i++)
{
if (Temp[i]["FSK"] == Kriterium_FSK)
{
Temp_Temp.push({
Nr: Temp[i]["Nr"],
Titel: Temp[i]["Titel"],
Inhalt: Temp[i]["Inhalt"],
Genre: Temp[i]["Genre"],
FSK: Temp[i]["FSK"],
});
}
}
for (var i = 0; i < Temp_Temp.length; i++)
{
Temp.push({
Nr: Temp_Temp[i]["Nr"],
Titel: Temp_Temp[i]["Titel"],
Inhalt: Temp_Temp[i]["Inhalt"],
Genre: Temp_Temp[i]["Genre"],
FSK: Temp_Temp[i]["FSK"],
});
}
Temp.splice (0, Temp_Temp.length);
}
Liste_ausgeben(Temp);
}
Muß ich beim "slice"-Befehl bei der Anwendung auf mein assoziatives Array anders vorgehen?
Viele Grüße
Enrico