首页 > 解决方案 > 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)

一个代码示例真的很感激吗?

标签: javascriptlocal-storagemozilla

解决方案


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 中围绕键存在一个奇怪的错误。)以上内容与 , 和其他类似键可靠地工作(但实际上它是最有问题的)。getItemsetItemStoragelength"length'localStorage.lengthlocalStorage.getItem("length")Object.keysObject.entries"key"lengthkeylengthkey

但是,在您的特定情况下,您知道密钥不是lengthorkey或任何其他东西 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 所示。请注意警告。


推荐阅读