Loop & search через ВСЕ предметы в localStorage

Я пытаюсь пройти через localStorage, чтобы получить ВСЕ элементы через localStorage.length, который работает с моим алгоритмом поиска. Если я изменяю: i < localStorage.length внутри цикла for просто число, то есть: 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, или что не так с алгоритмом поиска?

Ответы

Ответ 1

Проблема теперь РЕШАЕТ. Проблема заключалась в том, что каждый раз, когда данные сохранялись в localStorage, один дополнительный пустой элемент хранился в нижней части локального db как результат неправильно написанного цикла for (в части setItem.) ArrayIndex < guestData.length должен быть arrayIndex < guestData.length-1. arrayIndex < guestData.length-1 хранит все элементы без создания пустого элемента в нижней части базы данных, который позже испортил алгоритм поиска, поскольку последним значением для поиска было undefined (пустой элемент).

Ответ 2

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
}