通过HTML5和JavaScript中的localStorage循环

时间:2010-06-29 07:09:34

标签: javascript html5 loops object local-storage

所以,我认为我可以像普通对象一样循环遍历localStorage,因为它有一个长度。我该如何循环使用?

localStorage.setItem(1,'Lorem');
localStorage.setItem(2,'Ipsum');
localStorage.setItem(3,'Dolor');

如果我执行localStorage.length,则返回3这是正确的。所以我假设一个for...in循环可以工作。

我在想这样的事情:

for (x in localStorage){
    console.log(localStorage[x]);
}

但无济于事。有什么想法吗?

我的另一个想法是

localStorage.setItem(1,'Lorem|Ipsum|Dolor')
var split_list = localStorage.getItem(1).split('|');

for...in确实有效。

9 个答案:

答案 0 :(得分:122)

您可以使用key方法。 localStorage.key(index)返回index键(订单是实现定义的,但在您添加或删除键之前是不变的。)

for (var i = 0; i < localStorage.length; i++){
    $('body').append(localStorage.getItem(localStorage.key(i)));
}

如果订单很重要,您可以存储JSON序列化数组:

localStorage.setItem("words", JSON.stringify(["Lorem", "Ipsum", "Dolor"]));

规范草案声称支持structured clone的任何对象都可以是值。但这似乎还不支持。

编辑:要加载数组,请添加到该数组,然后存储:

var words = JSON.parse(localStorage.getItem("words"));
words.push("hello");
localStorage.setItem("words", JSON.stringify(words));

答案 1 :(得分:21)

除了所有其他答案之外,您还可以使用jQuery库中的$.each function

$.each(localStorage, function(key, value){

  // key magic
  // value magic

});

最终,使用以下内容获取对象:

  

<强> JSON .parse(localStorage.getItem(localStorage.key(键)));

答案 2 :(得分:14)

最简单的方法是:

Object.keys(localStorage).forEach(function(key){
   console.log(localStorage.getItem(key));
});

答案 3 :(得分:7)

这适用于Chrome:

for(var key in localStorage) {
  $('body').append(localStorage.getItem(key));
}

答案 4 :(得分:1)

在此前面的答案的基础上,该函数将在不知道键值的情况下通过键循环本地存储。

function showItemsByKey() {
   var typeofKey = null;
   for (var key in localStorage) {
       typeofKey = (typeof localStorage[key]);
       console.log(key, typeofKey);
   }
}

如果检查控制台输出,您将看到代码添加的项目都具有typeof字符串。而内置项是函数{[native code]},或者在length属性的情况下是数字。您可以使用typeofKey变量来仅过滤字符串,以便只显示您的项目。

请注意,即使您将数字或布尔值存储为值,这也会有效,因为它们都存储为字符串。

答案 5 :(得分:1)

所有这些答案都忽略了跨浏览器的localStorage实现之间的差异。 此域中的贡献者应该使用他们描述的平台严格限定他们的响应。 一个浏览器范围的实现记录在 https://developer.mozilla.org/en/docs/Web/API/Window/localStorage虽然非常强大,但只包含一些核心方法。循环使用内容需要了解特定于各个浏览器的实现。

答案 6 :(得分:1)

localStorage 将数据保存为键值对,并且可以通过函数 localStorage.getItem(key) 访问这些值,该函数以键为参数并返回具有给定键的键值对的值。< /p>

localStorage 的键值对可以通过函数 localStorage.setItem(key, value) 设置。

如果你想遍历 localStorage,你可以使用数字作为键。

localStorage.setItem(localStorage.length, value);

通过上面的这条指令,您将一个带有升序键的值附加到 localStorage,因为每次调用都会增加 localStorage 的长度。

现在可以使用以下 for 循环来迭代 localStorage。

for (let i = 0; i < localStorage.length; i++){
  console.log(localStorage.getItem(i));
} 

使用“let”或“var”来声明变量并不重要。两者的区别在于范围。如果你想了解更多关于 let 和 var 的区别,我会推荐你​​看教程点的解释(https://www.tutorialspoint.com/difference-between-var-and-let-in-javascript)。

答案 7 :(得分:0)

localStorageObject

我们可以像其他任何对象一样使用JavaScript for/in Statement遍历它。

然后我们将使用.getItem()来访问每个键(x)的值。

for (x in localStorage){
    console.log(localStorage.getItem(x));
}

答案 8 :(得分:0)

for (const [key, value] of Object.entries(localStorage)) {
   console.log(key, value);
}

这里我们分别遍历本地存储中的每个键和值。