2012-04-10 14 views
14

Próbuję przechodzić przez localStorage, aby uzyskać WSZYSTKIE elementy poprzez localStorage.length, które działają z moim algorytmem wyszukiwania. Jeśli zmienię: i < localStorage.length wewnątrz pętli for po prostu numer, tj .: for (i=0; i<100; i++) zamiast: (i=0; i<=localStorage.length-1; i++), everthing działa. Jednak zdaję sobie sprawę, że problem może tkwić w algorytmie wyszukiwania.Zapętlaj i przeszukuj WSZYSTKIE pozycje w localStorage

Kodeksu uzyskanie wszystkich przedmiotów (!?)

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 
    } 

Moja robocza algorytm wyszukiwania:

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;  
    } 
} 

Co jest nie tak z moim localStorage.length, lub co jest nie tak z algorytmu wyszukiwania?

+0

Być może ta odpowiedź WIĘC byłaby przydatna: http://stackoverflow.com/questions/3138564/looping-through-localstorage-in-html5-and-javascript –

+0

Jaka jest rzeczywista długość twojego localStorage? Spróbuj zapętlić ten sam numer zamiast 100. Mój proces myślowy jest taki, że może występować problem z danymi przechowywanymi po 100 (jak nie w oczekiwanym formacie). – Ramesh

+1

Proszę użyć 'var i', aby uniknąć tworzenia zmiennej globalnej (która jest wyjątkowo zła, szczególnie dla zmiennej pętli). – ThiefMaster

Odpowiedz

1

Problem teraz rozwiązany. Problem polegał na tym, że za każdym razem, gdy dane były zapisywane w localStorage, jeden dodatkowy pusty element był przechowywany na dole lokalnej bazy danych w wyniku nieprawidłowo napisanej pętli for (w części setItem.) ArrayIndex < guestData.length powinno być arrayIndex < guestData.length-1. arrayIndex < guestData.length-1 przechowuje wszystkie elementy bez tworzenia pustego elementu na dole bazy danych, który później zawiedli algorytm wyszukiwania, ponieważ ostatnia wartość do wyszukiwania była niezdefiniowana (pusty element).

16

localStorage to object, a nie array. Spróbuj 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

Nie oczekuje się, że obiekty i tablice zachowują się tak samo w kontekście, tj. Dostęp do wartości przez składnię tablicy lub obiektu –

+0

@VarinderSingh Wygląda na to, że chociaż '! (LocalStorage instanceof Array)', obiekt 'localStorage' ma właściwość' length'. Nie zdawałem sobie z tego sprawy, pisząc tę ​​odpowiedź. Czy o to Ci chodziło? – user2428118

+1

Tak, 'localStorage' ma właściwość' length'. Tak, jak na problem, o którym mowa, pozycje 'localStorage' mogą być zapętlone za pomocą trywialnego' for() ' –

Powiązane problemy