我正在尝试遍历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
有什么问题,或搜索算法有什么问题?
答案 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存储所有项目而不在数据库底部创建一个空项目,后来搞乱了搜索算法,因为最后一个要搜索的值是未定义的(空项目)。