2012-04-10 11 views
14

Estoy tratando de recorrer LOCAL Almacenamiento para obtener TODOS los artículos a través de localStorage.length que funciona con mi algoritmo de búsqueda. Si cambio: i < localStorage.length dentro del bucle for a simplemente un número, es decir: for (i=0; i<100; i++) en lugar de: (i=0; i<=localStorage.length-1; i++), everthing funciona. Sin embargo, me doy cuenta de que el problema podría estar en el algoritmo de búsqueda.Bucle y búsqueda a través de TODOS los elementos en localStorage

el código para conseguir todos los artículos: (!?)

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 
    } 

Mi trabajo algoritmo de búsqueda:

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

¿Qué está mal con mi localStorage.length, o lo que es malo en el algoritmo de búsqueda?

+0

quizás esta respuesta SO sea útil para usted: http://stackoverflow.com/questions/3138564/looping-through-localstorage-in-html5-and-javascript –

+0

¿Cuál es la longitud real de su almacenamiento local? Intente recorrer el mismo número en lugar de 100. Mi proceso de pensamiento es que puede haber un problema con los datos almacenados después de 100 (como no en el formato esperado). – Ramesh

+1

Utilice 'var i' para evitar crear una variable global (que es extremadamente mala, especialmente para una variable de bucle) – ThiefMaster

Respuesta

1

problema ahora resuelto. El problema era que cada vez que se guardaban datos en localStorage, se almacenaba un elemento vacío adicional en la parte inferior de la base de datos local como consecuencia de un bucle for incorrectamente escrito (en la parte setItem). ArrayIndex < guestData.length debería haber sido arrayIndex < guestData.length-1. arrayIndex < guestData.length-1 almacena todos los elementos sin crear un elemento vacío en la parte inferior de la base de datos que más tarde estropeó el algoritmo de búsqueda, ya que el último valor de búsqueda no estaba definido (el elemento vacío).

16

localStorage es object, no es array. Trate 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

No se espera que los objetos y matrices se comporten igual en contexto, es decir, accedan a los valores por matriz o sintaxis de objeto –

+0

@VarinderSingh Parece que aunque '! (LocalStorage instanceof Array)', el objeto 'localStorage' tiene una propiedad' length'. No me di cuenta de esto al escribir esta respuesta. ¿Es eso lo que quieres decir? – user2428118

+1

Sí, 'localStorage' posee propiedad' length'. Así que, según el problema en cuestión, los elementos de 'localStorage' podrían enlazarse utilizando' 'trivial''()' –

Cuestiones relacionadas