【问题标题】:Loop & search through ALL items in localStorage循环和搜索 localStorage 中的所有项目
【发布时间】:2012-04-22 09:50:08
【问题描述】:

我正在尝试遍历 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有什么问题,或者搜索算法有什么问题?

【问题讨论】:

  • 也许这个 SO 答案对你有用:stackoverflow.com/questions/3138564/…
  • 你的 localStorage 的实际长度是多少?尝试循环使用相同的数字而不是 100。我的思考过程是,存储在 100 之后的数据可能存在问题(不像您期望的格式)。
  • 请使用var i 避免创建全局变量(这非常糟糕,尤其是对于循环变量)

标签: javascript arrays for-loop local-storage


【解决方案1】:

问题现已解决。问题是每次将数据保存到 localStorage 时,由于错误编写的 for 循环(在 setItem 部分中),一个额外的空项目存储在本地数据库的底部。arrayIndex

【讨论】:

    【解决方案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
    }
    

    【讨论】:

    • 对象和数组在上下文中的行为是否相同,即通过数组或对象语法访问值
    • @VarinderSingh 看起来虽然!(localStorage instanceof Array)localStorage 对象确实有一个length 属性。写这个答案时我没有意识到这一点。是这个意思吗?
    • 是的,localStorage 确实拥有length 属性。所以,根据问题localStorage 的问题,可以使用琐碎的for() 循环遍历项目
    • 如果您的应用在客户端运行,则遍历本地存储中的所有数据可能会给您的应用带来开销
    • localStorage 和 window.localStorage 是一样的stackoverflow.com/questions/12660088/…
    猜你喜欢
    • 1970-01-01
    • 2014-09-15
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多