Не удаляйте все ключи локального хранилища - PullRequest
0 голосов
/ 01 сентября 2018

В моем приложении я хотел бы, чтобы через мгновение все ключи моего локального хранилища были удалены, за исключением всех ключей, которые содержат слово "волшебник".

Команды, такие как

localstorage.clear(); 

сотрет все, и я просто хочу оставить те, у которых есть слово "волшебник", я пробовал таким образом, но получаю ошибки, потому что, если я удаляю совпадение, на следующей итерации ключ будет пропущен, Я получу ошибку, которая пытается найти совпадение в позиции, которая теперь будет нулевой, так как она была удалена. как я могу решить это?

это мой код:

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 ) ) );
  }
}

Ответы [ 3 ]

0 голосов
/ 01 сентября 2018

Делай так:

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

И если вы пытаетесь найти значение элемента, то ваш код в порядке. Но вам просто нужно использовать регулярное выражение с глобальным флагом:

.search(/wizard/g)

С удалением элемента вот так:

localstorage.removeItem( localStorage.key( i )  );

Но не это:

localstorage.removeItem( localStorage.getItem( localStorage.key( i ) ) );
0 голосов
/ 01 сентября 2018

Скопируйте все элементы в localStorage объекта, затем очистите его. Затем скопируйте обратно необходимые элементы в localStorage.

localStorage.setItem("test", 123); 
localStorage.setItem("wizard", 123); 
var keyToSave = "wizard";

function clearStorageWithoutKey(keyToSave){
   var items = {...localStorage};
   localStorage.clear();
   localStorage.setItem(keyToSave,items[keyToSave]);
   console.log(localStorage);
}
clearStorageWithoutKey(keyToSave);
0 голосов
/ 01 сентября 2018

Вы можете перебрать 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));

Результат: останутся только клавиши 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));

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...