2012-04-10 5 views
14

Ich versuche LocalStorage durchlaufen, um alle Elemente über localStorage.length erhalten, die mit meinem Suchalgorithmus funktioniert. Wenn ich ändere: i < localStorage.length innerhalb der for-Schleife, um einfach eine Zahl, d. H .: for (i=0; i<100; i++) anstelle von: (i=0; i<=localStorage.length-1; i++), alles funktioniert. Ich weiß jedoch, dass das Problem in dem Suchalgorithmus liegen könnte.Schleife und durchsuchen Sie alle Elemente in localStorage

Der Code bekommen alle Elemente: (!?)

var name = new Array(); 

    for (var i = 0; i <= localStorage.length - 1; i++) { // i < 100 works perfectly 
    key = localStorage.key(i); 
    val = localStorage.getItem(key); 
    value = val.split(","); //splitting string inside array to get name 
    name[i] = value[1]; // getting name from split string 
    } 

Mein Arbeitssuchalgorithmus:

if (str.length == 0) { 
    document.getElementById("searchResult").innerHTML = ""; 
    } 
    else {   
     if(str.length > 0) { 
      var hint = ""; 
      for(var i=0; i < name.length; i++) {     
       if(str.toLowerCase() == (name[i].substr(0, str.length)).toLowerCase()) { //not sure about this line 
        if(hint == "") {        
          hint = name[i];       
         } else {        
          hint = hint + " <br /> " + name[i];         
         }     
        }      
      }    
     }   
} 

if(hint == "") { 
document.getElementById("searchResult").innerHTML=str + " står inte på listan";  
} else {   
    document.getElementById("searchResult").innerHTML = hint;  
    } 
} 

Was mit meinem localStorage.length falsch ist, oder was ist mit dem Suchalgorithmus falsch?

+0

vielleicht würde diese SO Antwort für Sie nützlich sein: http://StackOverflow.com/Questions/3138564/Looping-Through-Localstorage-in-HTML5-and-Javascript –

+0

Was ist die tatsächliche Länge Ihrer localStorage? Versuchen Sie, die gleiche Nummer anstelle von 100 zu durchlaufen. Mein Denkprozess ist, dass es ein Problem mit Daten geben kann, die nach 100 gespeichert sind (nicht in dem Format, das Sie erwarten). – Ramesh

+1

Verwenden Sie 'var i', um das Erstellen einer globalen Variablen zu vermeiden (was besonders für eine Schleifenvariable extrem schlecht ist) – ThiefMaster

Antwort

1

Problem nun behoben. Das Problem war, dass jedes Mal, wenn Daten in localStorage gespeichert wurden, ein zusätzliches leeres Element am unteren Ende der lokalen db als Folge einer falsch geschriebenen for-Schleife gespeichert wurde (im setItem-Teil.) ArrayIndex < guestData.length sollte arrayIndex sein < guestData.length-1. arrayIndex < guestData.length-1 speichert alle Elemente, ohne ein leeres Element am Ende der Datenbank zu erstellen, was später den Suchalgorithmus durcheinander brachte, da der letzte zu suchende Wert nicht definiert war (das leere Element).

16

localStorage ist ein object, kein array. Versuchen for(var i in window.localStorage):

for(var i in window.localStorage){ 
    val = localStorage.getItem(i); 
    value = val.split(","); //splitting string inside array to get name 
    name[i] = value[1]; // getting name from split string 
} 
+0

Es wird nicht erwartet, dass Objekte und Arrays sich im Kontext gleich verhalten, dh auf die Werte durch Array- oder Objektsyntax zugreifen –

+0

@VarinderSingh Es scheint, dass, obwohl '! (LocalStorage instanceof Array)', das 'localStorage'-Objekt eine 'length'-Eigenschaft besitzt. Ich habe das nicht bemerkt, als ich diese Antwort geschrieben habe. Meinst Du das? – user2428118

+1

Ja, 'localStorage' besitzt' length' -Eigenschaft.So, wie in dem Problem in Frage 'localStorage' Elemente könnten mit trivial' for() 'durchgeschleift werden –