2012-04-10 1 views
14

내 검색 알고리즘과 함께 작동 localStorage.length 통해 모든 항목을 얻으려면 localStorage를 통해 루프를하려고 해요. 내가 변경하는 경우 : for 루프 내의 i < localStorage.length을 단순히 숫자로 변경하십시오 (예 : (i=0; i<=localStorage.length-1; i++), , 대신 for (i=0; i<100; i++)). 그러나 문제가 검색 알고리즘에있을 수도 있다는 것을 알고 있습니다.루프 및 로컬 스토리지의 모든 항목을 통해 검색

코드 받고 모든 항목 (!?)

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 
    } 

내 작업 검색 알고리즘 :

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

무엇 내 localStorage.length와 잘못, 또는 무엇은 검색 알고리즘에 문제가 있습니다?

+0

아마도이 SO 응답은 유용 할 것입니다. http://stackoverflow.com/questions/3138564/looping-through-localstorage-in-html5-and-javascript –

+0

localStorage의 실제 길이는 얼마입니까? 100 대신에 같은 번호를 반복 해 봅니다. 생각한 프로세스는 100 이후에 저장된 데이터에 문제가있을 수 있다는 것입니다 (원하는 형식이 아님). – Ramesh

+1

'var i'를 사용하여 전역 변수 (특히 루프 변수의 경우 매우 나쁩니다)를 만들지 마십시오. – ThiefMaster

답변

1

문제가 이제 해결했다. 문제는 데이터가 localStorage에 저장 될 때마다 setItem 부분에 잘못 작성된 for 루프의 결과로 하나의 여분의 빈 항목이 로컬 db의 맨 아래에 저장되었다는 것입니다. arrayIndex < guestData.length는 arrayIndex 여야합니다. < guestData.length-1 arrayIndex < guestData.length-1은 데이터베이스의 맨 아래에 빈 항목을 만들지 않고 모든 항목을 저장합니다. 나중에 검색 알고리즘의 마지막 값이 정의되지 않았기 때문에 (빈 항목) 검색 알고리즘이 엉망입니다.

16

localstorage는 이 아닌 object입니다. 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

배열이나 객체 구문을 사용하여 값에 액세스하는 것과 같은 동작을하는 객체 및 배열이 아닌 것 같습니다. –

+0

@VarinderSingh '! (localStorage instanceof Array)'에도 불구하고'localStorage' 객체는'length' 속성을 가지고있는 것처럼 보입니다. 나는이 대답을 쓸 때 이것을 깨닫지 못했습니다. 이게 네가 말하는거야? – user2428118

+1

예,'localStorage'는'length' 속성을 가지고 있습니다. 문제의 문제에 따라'localstorage' 항목은'for()'를 사용하여 반복 될 수 있습니다 –

관련 문제