从JavaScript中的chrome.storage.local中删除以字符串开头的变量

问题描述 投票:0回答:1

在chrome扩展中,我将一些变量存储在chrome.storage.local中,如下所示:chrome.storage.local.set({["name" + counter]: ""}, function() {});(非常感谢Xan关于ES6计算属性名称here的答案),其中counter基本上是递增的数字。

我怎样才能使用chrome.storage.local.remove删除以前存储的“name”开头的所有变量,当我不再需要它们时?

注意:我使用这种类型的存储(“name0”,“name1”,...)因为我不能将它们存储为数组并在chrome.storage.local中动态更新它(我必须首先获取数组,更新它,然后将其存储回来,这不适合大量数据)。此外,在新的扩展执行的情况下,我不知道最大counter值,所以我无法在for循环中使用它。

javascript string google-chrome-extension local-storage
1个回答
1
投票

我试图把它放在评论上,因为事情超出了我的能力范围。但由于这给出了正确的格式,所以。

我看了chrome.storage,如果你将null传递给第一个参数,你将获得整个值。因此,通过提供回调,它就变成了

chrome.storage.local.get(null, function (items) {
    for (var key in items) {
        if (key.startsWith('name')) { // or key.includes or whatever
            chrome.storage.local.remove(key)
        }
    }
})

由于存储的项目可能足够大,因此将密钥存储在另一个密钥名称中也许可行。包装函数的示例

function set(key, value) {
    var collectionOfKeys = chrome.storage.local.get('collection_of_keys') || []

    collection_of_keys.push(key)

    chrome.storage.local.set('collection_of_keys', collection_of_keys)
    chrome.storage.local.set('name' + key, value)
}

去除

chrome.storage.local.remove(chrome.storage.local.get('collection_of_keys'))

嗯,如果键的大小仍然很大,那就太笨了。

如果您按顺序保留它,可能会跟踪它的长度。

function set(key, value) {
    var collectionOfKeyLength = chrome.storage.local.get('collection_of_key_length') || 0

    chrome.storage.local.set('collection_of_key_length', collectionOfKeyLength + 1)
    chrome.storage.local.set('name' + key, value)
}

function remove () {
    for (var i = 0; i < chrome.storage.local.get('collection_of_key_length'); i++) {
        chrome.storage.local.remove('name' + i)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.