有没有办法删除所有 sessionStorage 项目与匹配特定模式的键?
Posted
技术标签:
【中文标题】有没有办法删除所有 sessionStorage 项目与匹配特定模式的键?【英文标题】:Is there a way to remove all sessionStorage items with keys that match a certain pattern? 【发布时间】:2013-11-19 14:50:33 【问题描述】:假设我的sessionStorage
包含三个对象,它们的键是foo
、foobar
和baz
。有没有办法可以调用.removeItem
或以某种方式删除sessionStorage
中的所有项目谁的键匹配foo
?在此示例中,我将只剩下密钥为 baz
的项目。
【问题讨论】:
【参考方案1】:2014 年 9 月 20 日更新 正如 Jordan Trudgett 所指出的,反向循环更合适
您只能以编程方式实现它,因为 sessionStorage
公开了一组有限的方法:getItem(key)
、setItem(key, value)
、removeItem(key)
、key(position)
、clear()
和 length()
:
var n = sessionStorage.length;
while(n--)
var key = sessionStorage.key(n);
if(/foo/.test(key))
sessionStorage.removeItem(key);
有关更多详细信息,请参阅 Nicholas C. Zakas 的博客文章:
http://www.nczonline.net/blog/2009/07/21/introduction-to-sessionstorage/
【讨论】:
您应该以相反的顺序遍历存储对象,因为当您删除项目时,索引会更改。这样做可能会遗漏一些项目。 需要说明的是,与其他数组不同的是,sessionStorage的key是从1索引到sessionStorage.length。如果您要使用 for 循环,则索引应该是正确的。 如果变量中有模式作为字符串 - var patternStr = 'foo';你可以使用 (new RegExp(patternStr)).test(key)【参考方案2】:你可以这样做
Object.keys(sessionStorage)
.filter(function(k) return /foo/.test(k); )
.forEach(function(k)
sessionStorage.removeItem(k);
);
【讨论】:
【参考方案3】:由于 local 和 sessionStorage 都是对象,您可以像这样查看它们的属性:
for (var obj in localStorage)
if (localStorage.hasOwnProperty(obj) && obj == "myKey")
localStorage.removeItem(obj);
并通过键删除所需的值,例如“myKey”。
【讨论】:
【参考方案4】:删除所有会话存储项:
sessionStorage.clear()
【讨论】:
【参考方案5】:试试这个:
angular.forEach(sessionStorage, function (item,key)
sessionStorage.removeItem(key);
);
这将从 sessionStorage 中删除所有内容
【讨论】:
没有 Angular 标签,所以你的答案在这种情况下没有用。以上是关于有没有办法删除所有 sessionStorage 项目与匹配特定模式的键?的主要内容,如果未能解决你的问题,请参考以下文章
Javascript:从 sessionStorage 中检索所有密钥?
localStorage 和 sessionStorage 的用法