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.keys
、Object.entries
等的解决方案无法对所有存储密钥可靠地工作——例如,密钥 "length"
将无法正常工作,即使可以将 "length'
用作 getItem
和 setItem
的键。那是因为 Storage
接口已经定义了一个名为 length
的 属性 (存储列表的长度),所以你不能使用 "length'
访问存储的项目 localStorage.length
,你必须localStorage.getItem("length")
。 Object.keys
和 Object.entries
将忽略那些存储条目。 (除了看起来 Chrome 中 "key"
键周围有一个奇怪的错误。) 以上与 length
、[=14= 可靠地工作],以及其他类似的键(但实际上 length
和 key
是最有问题的)。
在你的特殊情况中,你知道密钥不是length
或key
或[=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])
我正在寻找基于唯一密钥的部分知识从 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.keys
、Object.entries
等的解决方案无法对所有存储密钥可靠地工作——例如,密钥 "length"
将无法正常工作,即使可以将 "length'
用作 getItem
和 setItem
的键。那是因为 Storage
接口已经定义了一个名为 length
的 属性 (存储列表的长度),所以你不能使用 "length'
访问存储的项目 localStorage.length
,你必须localStorage.getItem("length")
。 Object.keys
和 Object.entries
将忽略那些存储条目。 (除了看起来 Chrome 中 "key"
键周围有一个奇怪的错误。) 以上与 length
、[=14= 可靠地工作],以及其他类似的键(但实际上 length
和 key
是最有问题的)。
在你的特殊情况中,你知道密钥不是length
或key
或[=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])