我可以帮您翻译成中文:我可以使用哪个查询来从选定的键值的本地存储中获取数据?

6
我需要在本地存储中存储大量与我的应用程序相关的数据。我已成功地完成了存储。现在,我需要获取所选键/值的数组,而不是全部或仅其中一个。我将这些键命名为“section”+id,如下所示,需要在数组中选择它们。 在此输入图片描述

localStorage.getItem(key); - Shiladitya
2个回答

9

localStorage.getItem(key)会返回您提供的键的数据。localStorage中的数据被序列化,因此您需要使用JSON.parse(data)将其解析为普通JS对象,然后可以像处理任何其他对象一样处理它。

您只能使用localStorage.getItem获取单个项目,因此如果要在数组中获取多个项目,则必须循环并逐个获取每个项目并将它们放入数组中。
也许可以尝试以下代码:

var keys = Object.keys(localStorage).filter(function(key) {
  return /^section\d+$/.test(key);
});

var dataArray = keys.map(function(key) {
  return JSON.parse(localStorage.getItem(key));
});

首先,我们使用filter函数获取所有以 "section###" 为键的数据。接着使用map函数创建一个新数组,其中包含每个对应项的数据。


我需要动态选择键,就像你上面解释的那样,但我无法理解这段代码/^section\d+$/.test(key);,在控制台中它显示了10个true和2个false。请问你能指导我如何将它们分别放入每个数组中,以便我可以进一步使用它们吗? - user2828442
@user2828442 它匹配所有由“section”后跟数字组成的键,因此它匹配“section321”,“section323”等键,但不匹配诸如“sectionTypes”或“templateType”之类的键。从您的屏幕截图中可以看出这是您想要的模式。此检查用作filter函数的条件,因此keys数组仅包含您的“section###”键,以便在获取和解析所有这些项目的数据时使用。 - Lennholm
谢谢,这正是我在寻找的,运行得非常好。 - user2828442
我需要从对象中获取“title”,你能指导我如何做吗?console.log(dataArray.title);无法工作。 - user2828442

1
尝试这段代码。我已经编辑过了。

var keys = [];
var data = [];

for (var key in localStorage) {
  if (key.indexOf("section") > -1) 
    keys.push(key);
}

for (var i in keys) {
  data.push(localStorage.getItem(keys[i]))
}

你是否也想以数组的形式获取他们的所有数据? - user8003769
@AbhinavS.Chauhan 我会把 data.push 放在第一个 for 循环里面,因为 JavaScript 不是同步的,所以最后一个 for 循环可能会在第一个 for 循环执行到一半时被执行。 - Douwe de Haan
@DouwedeHaan 这完全不正确,这段代码中没有异步操作。for循环是完全同步的。 - Lennholm
@MikaelLennholm 我错了。我最好重新开始阅读一些资料。我记得在stackoverflow上有人提到过它,所以我以为它适用于每个循环和其他东西! - Douwe de Haan
@DouwedeHaan 也许你在考虑一个非常普遍的问题,即人们希望在迭代之间有延迟,并认为可以通过在for循环内部放置setTimeout()来实现这一点。无论如何,你在第一个循环中推送数据的建议仍然是好的,因为这种方法只需要一个循环。但是,这个答案中的代码本身就是非常错误的。 - Lennholm
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接