在 HTML5 和 JavaScript 中循环遍历 localStorage

IT技术 javascript html loops object local-storage
2021-01-17 12:59:08

所以,我想我可以像普通对象一样循环遍历 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确实有效。

6个回答

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

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

如果顺序很重要,您可以存储一个 JSON 序列化数组:

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

规范草案声称任何支持结构化克隆的对象都可以是一个值。但这似乎还没有得到支持。

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

var words = JSON.parse(localStorage.getItem("words"));
words.push("hello");
localStorage.setItem("words", JSON.stringify(words));
你摇滚,只是看着,它应该工作。我有什么理由应该使用 parse 而不是 eval 吗?我现在正在使用 eval 从字符串中获取它,但是解析更好/更快吗?
2021-03-15 12:59:08
非常感谢!这正是我正在寻找的。我还要查看您发送的 JSON 内容。那就完美了 它适用于 Baby Names Offline HTML5 iOS 应用程序。
2021-03-22 12:59:08
@Oscarparse更安全,因为它可以保护您免受代码执行的影响。通常,它也快得多。blog.mozilla.com/webdev/2009/02/12/native-json-in-firefox-31
2021-03-30 12:59:08
快速提问,我将如何添加到该 JSON 中?比如,我如何在“Dolor”之后添加“你好”?
2021-03-31 12:59:08
@BBagi,它返回任何输入,解码。JSON 文本的顶层可以是对象或数组。尝试JSON.parse('["Lorem", "Ipsum", "Dolor"]').length
2021-04-03 12:59:08

最简单的方法是:

Object.keys(localStorage).forEach(function(key){
   console.log(localStorage.getItem(key));
});
@TheoretiCAL 可能是因为您覆盖了原型。
2021-03-24 12:59:08
这对我有用。$.each(localStorage, function(key, value)由于某种原因,使用在键列表中包含了 localStorage 函数(即 clearR)。
2021-04-01 12:59:08

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

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

  // key magic
  // value magic

});

最后,使用以下命令获取对象:

JSON .parse(localStorage.getItem(localStorage.key(key)));

这仅在您使用 jQuery 时有效。$用于其他库,也经常用作document.querySelectorAll. 该问题也未标记为 [jquery] 问题。
2021-03-29 12:59:08

这在 Chrome 中对我有用:

for(var key in localStorage) {
  $('body').append(localStorage.getItem(key));
}
@JuanCarlosAlpizarChinchilla 代码中没有“toString”,所以¯_(ツ)_/¯。正如上面评论中所指出的,在所有最近的浏览器中都可以正常工作。
2021-03-16 12:59:08
具体是哪个部分?此代码段根据原始问题使用 jQuery。你可以在 chrome js 控制台中试试这个吗?for(var key in localStorage) { console.log(localStorage.getItem(key)); }
2021-03-20 12:59:08
@jtblin 我刚试过,它返回了TypeError: Cannot call method 'toString' of null,所以我假设“key”返回 null
2021-03-22 12:59:08
这适用于最新版本的 Chrome、Safari 和 Firefox
2021-04-01 12:59:08
@jtblin 我的评论已经两年了,所以 ¯_(ツ)_/¯ 谢谢你的提醒
2021-04-10 12:59:08

建立在前面的答案的基础上是一个函数,它将在不知道键值的情况下通过键循环遍历本地存储。

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

如果您检查控制台输出,您将看到代码添加的项目都有一个 typeof 字符串。而内置项目要么是函数 { [native code] },要么是长度属性的数字。您可以使用 typeofKey 变量仅对字符串进行过滤,以便仅显示您的项目。

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