for schleife mit Array in Javascript

Dieses Thema im Forum "Webentwicklung" wurde erstellt von BladeFire, 12. Februar 2015 .

  1. 12. Februar 2015
    Hallo,

    Ich habe ein kleines Problem.

    Javascript gibt mir folgenden Fehler aus:

    TypeError: produkt is undefined (Zeile 26);


    Mein Code sieht folgendermasen (beim Client) aus:
    Code:
    
     // Die Funktion wird aufgerufen
    function suchdas(wert)
    {
     // Alle Felder werden unsichtbar gemacht
     // scheint zu funktionieren
     for (var i = 1; i < produkt.length; i++)
     {
    
     document.getElementById(i).style.display = 'none';
     }
     
     // Die felder die dem eingegeben wert teilweise entsprechen, sollen wieder sichtbar gemacht werden.
     for (var i = 1; i < produkt.length; i++)
     {
     // Hier taucht der fehler auf.
     if (produkt[i]["titel"].search(wert) != -1)
     { 
     document.getElementById(i).style.display = '';
     }
     }
     
     // Wenn der Benutzer nichts eingegeben hat, sollen wieder alle sichtbar sein.
     // scheint zu funktionieren
     if (wert == '')
     {
     for (var i = 1; i < produkt.length; i++)
     {
     document.getElementById(i).style.display = ''; 
     }
     }
    }
    // [...] HTML [...]
     var produkt = new Array();
     produkt[1] = new Array();
     produkt[1]["id"] = "1";
     produkt[1]["titel"] = "ABC - DEFG";
     produkt[1]["kurzbeschreibung"] = "test";
     produkt[1]["beschreibung"] = "testtest";
     produkt[1]["preis"] = "10";
     produkt[1]["kategorie"] = "Testkategorie";
    
    // [...] HTML [...]
    
     var produkt = new Array();
     produkt[2] = new Array();
     produkt[2]["id"] = "2";
     produkt[2]["titel"] = "asdfasdfasdf";
     produkt[2]["kurzbeschreibung"] = "asdfasdfdsgdsfdsafasdf";
     produkt[2]["beschreibung"] = "testdsd";
     produkt[2]["preis"] = "10";
     produkt[2]["kategorie"] = "Kategorie2";
    
    
    Wenn ich eine for-in schleife einsetze anstatt einer vor schleife, dann funktiniert es. (Allerdings nur für die nummer 2, Die nummer 1 lässt er aus)

    Code:
    function suchdas(wert)
    {
     // Alle Felder werden unsichtbar gemacht
     // scheint zu funktionieren
     for (var i = 1; i < produkt.length; i++)
     {
    
     document.getElementById(i).style.display = 'none';
     }
     
     // Die felder die dem eingegeben wert teilweise entsprechen, sollen wieder sichtbar gemacht werden.
     // läuft nur 1 mal durch. (i ist dabei 2)
     for (var i in produkte)
     {
    
     // i ist 2
     if (produkt[i]["titel"].search(wert) != -1)
     { 
     document.getElementById(i).style.display = '';
     }
     }
     // funktioniert
     // Wenn der Benutzer nichts eingegeben hat, sollen wieder alle sichtbar sein.
     if (wert == '')
     {
     for (var i = 1; i < produkt.length; i++)
     {
     document.getElementById(i).style.display = ''; 
     }
     }
    }
    
    
    Danke für eure Antworten!
     
  2. 12. Februar 2015
    AW: for schleife mit Array in Javascript

    der fehler ist einmal das du bei 1 und nicht 0 anfängst: (geht zwar auch aber ist nicht üblich)

    for (var i = 1;

    der zweite und eigentliche fehler ist, dass das produkt array überschrieben wird und nur auf index 2 inhalt ist, deshalb hat er bei 0 und 1 einen fehler weil die nicht existieren.


    var produkt = new Array();
    produkt[1] = new Array();

    wird hier überschrieben:

    var produkt = new Array();
    produkt[2] = new Array();
     
  3. 13. Februar 2015
    AW: for schleife mit Array in Javascript

    Zudem das hier:

    Code:
    produkt[1] = new Array();
    muss:

    Code:
    produkt[0] = new Object();
    Array in JavaScript ist, nicht wie in PHP, nur für Listen zuständig.
    Eine HashMap aka. Assoziatives Array ist in JavaScript entweder Object oder Map.

    PS: Array funktioniert auch, aber nur weil von Object geerbt wurde. Dennoch ist Array in deinem Fall fehl am Platz.
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.