for schleife mit Array in Javascript

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

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  1. BladeFire
    BladeFire Neu
    Stammnutzer
    #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. Anzeige
  3. raid-rush
    raid-rush Admin
    Administrator
    #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();
     
  4. BladeFire
    BladeFire Neu
    Stammnutzer
    #3 12. Februar 2015
    AW: for schleife mit Array in Javascript

    Danke!
     
  5. Murdoc
    Murdoc D'OH!
    Team
    #4 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.
     

  6. Videos zum Thema