14

localStorage.length検索アルゴリズムで動作するすべてのアイテムを取得するために localStorage をループしようとしています。i < localStorage.lengthfor ループ内で: を単に数値に変更すると、つまり:for (i=0; i<100; i++)の代わりに: (i=0; i<=localStorage.length-1; 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なのか、または検索アルゴリズムの何が問題なのか?

4

2 に答える 2

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
}
于 2012-05-26T17:17:28.317 に答える
1

問題は解決しました。問題は、データがlocalStorageに保存されるたびに、(setItem部分で)forループが誤って書き込まれた結果として、1つの余分な空のアイテムがローカルデータベースの下部に格納されることでした。arrayIndex<guestData.lengthはarrayIndexである必要があります<guestData.length-1。arrayIndex <guestData.length-1は、データベースの下部に空のアイテムを作成せずにすべてのアイテムを格納します。これは、検索する最後の値が未定義(空のアイテム)であるため、後で検索アルゴリズムを台無しにしました。

于 2012-08-18T03:02:51.827 に答える