我可以使用啥查询从选定键值的本地存储中获取数据

Posted

技术标签:

【中文标题】我可以使用啥查询从选定键值的本地存储中获取数据【英文标题】:What query can i use to fetch data from local storage of selected key value我可以使用什么查询从选定键值的本地存储中获取数据 【发布时间】:2017-10-13 07:59:07 【问题描述】:

我需要在本地存储中为我的应用存储大量数据。我成功地存储了它。现在我需要在一个数组中获取数据,但不是选定的键/值,而不是全部或只是其中的 1 个。我将这些键命名为“section”+id,如下所示,需要在数组中选择它们。

【问题讨论】:

localStorage.getItem(key); 【参考方案1】:

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 真,2 假。你能指导我如何在每个数组中获取这些,以便我可以进一步使用它们 @user2828442 它匹配所有由“section”后跟数字组成的键,因此它匹配“section321”、“section323”等,但它不匹配诸如“sectionTypes”或“模板类型”。它从您的屏幕截图中获取了您想要的模式。此检查用作filter 函数的条件,因此keys 数组将仅包含您的“section###”键,以便在获取和解析所有这些项目的数据时使用。 谢谢,这就是我要找的东西,就像一个魅力 我需要从对象中获取“标题”,你能指导我怎么做吗,console.log(dataArray.title); 不工作【参考方案2】:

试试这个代码。我已经编辑过了。

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]))

【讨论】:

但我不知道键名,我需要选择部分+一些编号的键。在一个循环中,您现在可以相应地更新您的解决方案吗 你是否也想在数组中获取他们所有的数据 @AbhinavS.Chauhan 我会将 data.push 放在第一个 for 循环中,因为 javascript 不是同步的,因此最后一个 for 循环可以执行到第一个循环的一半. @DouwedeHaan 这完全不正确,这段代码中没有异步操作。 for 循环是完全同步的。 @MikaelLennholm 我的错。那我最好再开始读一些东西。我记得有人在 *** 上提到过一次,所以我认为它适用于每个循环和东西!

以上是关于我可以使用啥查询从选定键值的本地存储中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

怎样从对象中获取键值并保存在对象中

获取值的键而不是获取键值? [复制]

从datagridview中选定行的值的ID中获取名称

他们有啥方法可以从 KendoTreeView 中获取选定的节点并在 Angular 5 中的另一个 KendoTreeView 中显示它们

在 JavaScript 中获取具有键值的对象数据

使用 Spring Jpa 从两个或多个表中获取选定的列