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)
您可以迭代 of entries,localStorage并在值包含时删除该键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/