不要删除localstorage的所有键

yav*_*avg 8 javascript local-storage

在我的应用程序中,我希望稍后我的本地存储的所有键都将被删除,但所有包含"向导"一词的键除外.

命令如

localstorage.clear(); 
Run Code Online (Sandbox Code Playgroud)

将删除所有内容,我只想保留那些带有"向导"的词,我试过这种方式,但是我得到错误,因为如果我删除了一个匹配项,在下一次迭代中会跳过一个键,我会得到尝试在现在为空的位置搜索匹配项的错误,因为它已被删除.我怎么解决这个问题?

这是我的代码:

for ( var i = 0, len = localStorage.length; i < len; ++i ) {
  //if the key not contain the word "wizard" will be erased
  if( localStorage.getItem(localStorage.key(i)).search("wizard")==-1){
   localstorage.removeItem( localStorage.getItem( localStorage.key( i ) ) );
  }
}
Run Code Online (Sandbox Code Playgroud)

Cer*_*nce 5

您可以迭代 of entrieslocalStorage并在值包含时删除该键wizard

localStorage.foo = 'foo';
localStorage.bar = 'wizard1';
localStorage.baz = 'wizard2';
localStorage.buzz = 'buzz';

Object.entries(localStorage).forEach(([key, val]) => {
  if (!val.includes('wizard')) delete localStorage[key];
});
console.log(Object.keys(localStorage));
Run Code Online (Sandbox Code Playgroud)

结果:仅保留bar和键。baz

(无法作为嵌入式片段发布,因为堆栈片段不支持 localStorage)

https://jsfiddle.net/cLm3kg01/

如果您想保留包含的键名称wizard而不是包含的wizard,请使用Object.keys而不是Object.entries迭代键:

localStorage.wizard1 = 'foo';
localStorage.wizard2 = 'bar';
localStorage.baz = 'baz';
localStorage.buzz = 'buzz';

Object.keys(localStorage).forEach((key) => {
  if (!key.includes('wizard')) delete localStorage[key];
});
console.log(Object.keys(localStorage));
Run Code Online (Sandbox Code Playgroud)

https://jsfiddle.net/cLm3kg01/6/