2012-04-10 15 views
14

Sto provando a passare da localStorage per ottenere TUTTI gli articoli tramite localStorage.length che funziona con il mio algoritmo di ricerca. Se cambio: i < localStorage.length all'interno del ciclo for a semplicemente un numero, ad esempio: for (i=0; i<100; i++) anziché: (i=0; i<=localStorage.length-1; i++), funziona tutto il. Tuttavia, mi rendo conto che il problema potrebbe risiedere nell'algoritmo di ricerca.Loop e ricerca attraverso TUTTE le voci in localStorage

Il codice di ottenere tutti gli articoli: (!?)

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 
    } 

mio lavoro algoritmo di ricerca:

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

Cosa c'è di sbagliato con il mio localStorage.length, o che cosa c'è di sbagliato con l'algoritmo di ricerca?

+0

forse questa risposta SO sarebbe utile per voi: http://stackoverflow.com/questions/3138564/looping-through-localstorage-in-html5-and-javascript –

+0

Qual è la lunghezza effettiva del localStorage? Prova a ripetere lo stesso numero invece di 100. Il mio pensiero è che potrebbe esserci un problema con i dati memorizzati dopo 100 (come non nel formato che ti aspetti). – Ramesh

+1

Si prega di usare 'var i' per evitare di creare una variabile globale (che è estremamente cattiva, specialmente per una variabile di ciclo) – ThiefMaster

risposta

1

problema ora risolto. Il problema era che ogni volta che i dati venivano salvati su localStorage, un elemento extra vuoto veniva memorizzato nella parte inferiore del db locale come conseguenza di un ciclo errato scritto (nella parte setItem). ArrayIndex < guestData.length avrebbe dovuto essere arrayIndex < guestData.length-1. arrayIndex < guestData.length-1 memorizza tutti gli elementi senza creare un elemento vuoto nella parte inferiore del database che successivamente ha incasinato l'algoritmo di ricerca, poiché l'ultimo valore da cercare non era definito (l'elemento vuoto).

16

localStorage è un object, non uno array. Prova 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

Non ci si aspetta che gli oggetti e gli array si comportino nello stesso contesto, ad esempio l'accesso ai valori mediante sintassi di array o oggetto –

+0

@VarinderSingh Sembra che nonostante '! (LocalStorage instanceof Array)', l'oggetto 'localStorage' abbia una proprietà' length'. Non me ne sono reso conto quando ho scritto questa risposta. È questo che vuoi dire? – user2428118

+1

Sì, 'localStorage' possiede la proprietà' length'. Quindi, come per il problema in questione, gli elementi 'localStorage' possono essere ripetuti usando' triviale 'per()' –

Problemi correlati