Mozilla localStorage.getItem 基于唯一密钥的部分知识

Mozilla localStorage.getItem based on partial knowlege of an unique key

我正在寻找基于唯一密钥的部分知识从 Mozilla localStorage 获取项目的快速方法。我将以下结构定义为键:value

UUID1 : "BLABLABLA": UUID2 : Value

例如,关键部分如下所示:

ca4417f4-f83b-11eb-bf45-ffc420139ccb:BLABLABLA:e1d26c40-f83b-11eb-81c0-fbcc16bf6bdb

值只是一个长字符串。

仅基于两个 UUID(即 UUID1 或 UUID2)之一从 localStorage 中查找单个密钥的最快方法是什么,然后获取完整的密钥字符串,然后使用

localStorage.getItem到return是值

也许使用 Object.entries(localStorage)

一个代码示例将不胜感激?

Storage interface has a length property telling you how many items are there, and a key method 为您提供项目索引 n 的键。因此,您可以通过 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.keysObject.entries 等的解决方案无法对所有存储密钥可靠地工作——例如,密钥 "length" 将无法正常工作,即使可以将 "length' 用作 getItemsetItem 的键。那是因为 Storage 接口已经定义了一个名为 length 的 属性 (存储列表的长度),所以你不能使用 "length' 访问存储的项目 localStorage.length,你必须localStorage.getItem("length")Object.keysObject.entries 将忽略那些存储条目。 (除了看起来 Chrome 中 "key" 键周围有一个奇怪的错误。) 以上与 length、[=14= 可靠地工作],以及其他类似的键(但实际上 lengthkey 是最有问题的)。

你的特殊情况中,你知道密钥不是lengthkey或[=36上的任何其他东西=],所以你可以通过 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 创建一个数组数组作为 。请注意警告。

扩展您的 Object.entries() 概念,您可以执行以下操作:

// set a demo key/value
localStorage.setItem('foobar', 100);

const [wantedKey, wantedValue] = Object.entries(localStorage).find(([k,v])=> k.startsWith('foo'))



console.log([wantedKey, wantedValue])

Working jsfiddle