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

时间:2017-12-24 15:33:42

标签: javascript string google-chrome-extension local-storage

在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循环中使用它。

1 个答案:

答案 0 :(得分: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)
    }
}