javascript - Mozilla localStorage.getItem 基于唯一密钥的部分知识
问题描述
我正在寻找基于唯一密钥的部分知识从 Mozilla localStorage 获取项目的快速方法。我将以下结构定义为键:值
UUID1 : "BLABLABLA": UUID2 : Value
例如,关键部分如下所示:
ca4417f4-f83b-11eb-bf45-ffc420139ccb:BLABLABLA:e1d26c40-f83b-11eb-81c0-fbcc16bf6bdb
值只是一个长字符串。
仅基于两个 UUID 之一(即 UUID1 或 UUID2)从 localStorage 中找到 SINGLE 密钥的最快方法是什么,然后获取完整的密钥字符串,然后使用
localStorage.getItem返回它的值
也许使用Object.entries(localStorage)
?
一个代码示例真的很感激吗?
解决方案
该Storage
接口有一个length
属性告诉您有多少项目,以及一个为您提供项目索引n的键的key
方法。因此,您可以循环查找带有循环的密钥:for
let key;
for (let n = 0, len = localStorage.length; n < len; ++n) {
const thisKey = localStorage.key(n);
if (thisKey.includes("BLABLABLA")) {
// found it
key = thisKey;
break;
}
}
if (key) {
const value localStorage.getItem(key);
// ...
}
请注意,使用Object.keys
,Object.entries
等的解决方案不能可靠地与所有存储密钥一起使用 - 例如,"length"
即使使用 和 用作密钥也很好,密钥将无法正常"length'
工作。那是因为接口已经定义了一个名为(存储列表的长度)的属性,所以你不能访问使用键控的存储项,你必须. 并将省略那些存储条目。(除了似乎在 Chrome 中围绕键存在一个奇怪的错误。)以上内容与 , 和其他类似键可靠地工作(但实际上它是最有问题的)。getItem
setItem
Storage
length
"length'
localStorage.length
localStorage.getItem("length")
Object.keys
Object.entries
"key"
length
key
length
key
但是,在您的特定情况下,您知道密钥不是length
orkey
或任何其他东西 on Storage.prototype
,因此您可以通过创建一个密钥数组Object.keys
并使用它find
来查找密钥:
// Read the disclaimers above
const key = Object.keys(localStorage).find(key => key.includes("BLABLABLA"));
if (key) {
const value localStorage.getItem(key);
// ...
}
...或用于Object.entries
创建数组数组,如charlietfl 所示。请注意警告。
推荐阅读
- javascript - 在 JavaScript 中转换视角 - 矩阵数学
- amazon-web-services - 使用 aws 客户端仅从单个目录复制 s3 文件(非递归)
- android - 无法导入 CameraX 的供应商扩展
- flutter - 在 Runner 设置中编译 Flutter iOS 错误
- python - 如何在 Python 中写入临时文件并再次读取?
- powershell - 文本文件是否有输出限制?
- unity3d - 从 Unity 的子文件夹中访问脚本
- iis - dotnet publish 错误:该进程无法访问该文件,因为它正被另一个进程使用
- java - Zeppelin:Hive 解释器没有获取详细信息
- python - 从数据框列中删除部分字符串