【问题标题】:Is there a way to remove all sessionStorage items with keys that match a certain pattern?有没有办法删除所有 sessionStorage 项目与匹配特定模式的键?
【发布时间】:2013-11-19 14:50:33
【问题描述】:

假设我的sessionStorage 包含三个对象,它们的键是foofoobarbaz。有没有办法可以调用.removeItem 或以某种方式删除sessionStorage 中的所有项目谁的键匹配foo?在此示例中,我将只剩下密钥为 baz 的项目。

【问题讨论】:

    标签: javascript browser sessionstorage


    【解决方案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 标签,所以你的答案在这种情况下没有用。