循环&搜索localStorage中的所有项目

时间:2012-04-10 04:26:03

标签: javascript arrays for-loop local-storage

我正在尝试遍历localStorage以通过localStorage.length获取适用于我的搜索算法的所有项目。如果我将for循环中的i < localStorage.length更改为简单的数字,即:for (i=0; i<100; i++)而不是:(i=0; i<=localStorage.length-1; i++) everthing 有效。但是,我确实意识到问题可能在于搜索算法。

获取所有项目的代码:

   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有什么问题,或搜索算法有什么问题?

2 个答案:

答案 0 :(得分:16)

localStorage是object,而不是array。 试试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
}

答案 1 :(得分:1)

问题现在解决了。问题是,每次将数据保存到localStorage时,由于错误地写入for循环(在setItem部分中),一个额外的空项存储在本地数据库的底部.arixIndex&lt; guestData.length应该是arrayIndex&lt; guestData.length-1。 arrayIndex&lt; guestData.length-1存储所有项目而不在数据库底部创建一个空项目,后来搞乱了搜索算法,因为最后一个要搜索的值是未定义的(空项目)。