Очистить значения localstorage с определенным префиксом

Я сохранил несколько пар ключевых значений, которые содержат определенную зашифрованную регистрационную информацию, используя переменные localstorage HTML5. Я добавил уникальный префикс для всех имен ключей, скажем TM_loginname. Теперь я хочу очистить все пары key-value localstorage, ключ которых начинается с префикса TM_. PS: Я тоже пробовал sessionstorage, но он очищается только тогда, когда браузер закрыт.

Ответ 1

Удаление элемента во время итерации небезопасно, поэтому создайте массив для хранения ключей, которые необходимо удалить. Затем, итерации по этому массиву, чтобы удалить их:

var arr = []; // Array to hold the keys
// Iterate over localStorage and insert the keys that meet the condition into arr
for (var i = 0; i < localStorage.length; i++){
    if (localStorage.key(i).substring(0,3) == 'TM_') {
        arr.push(localStorage.key(i));
    }
}

// Iterate over arr and remove the items by key
for (var i = 0; i < arr.length; i++) {
    localStorage.removeItem(arr[i]);
}

Ответ 2

Использование lodash. Наслаждайтесь.

_.forIn(window.localStorage, (value: string, objKey: string) => {
    if (true === _.startsWith(objKey, 'TM_')) {
        window.localStorage.removeItem(objKey);
    }
});

Ответ 3

сохранить в localStorage, используя key = pref + version

function remLSPref(pref, newName) {
    for (var key in localStorage) {
        if (key.indexOf(pref) == 0) {
            if (key != newName) {
                localStorage.removeItem(key);
            }
        }
    }
}

и используйте вот так:

var pref = 'myid_';
var key = pref + ver;

// rem old ls
remLSPref(pref, key);

Ответ 4

Вы можете:

  • сохранить массив всех элементов, которые вы создали сами, или
  • перебрать все элементы localStorage и отфильтровать, чтобы получить те, которые вы необходимо.

Ответ 5

Адаптация кончика github:

findLocalItems(query) {
var i,
  results = [];
for (i in localStorage) {
  if (localStorage.hasOwnProperty(i)) {
    if (i.match(query) || (!query && typeof i === 'string')) {
      var value = JSON.parse(localStorage.getItem(i));
      results.push({ key: i, val: value });
    }
  }
}
return results;  }

И после вызова функции:

var keysFounded = findLocalItems(key);
if (keysFounded && keysFounded.length > 0) {
  keysFounded.forEach(k => {
    localStorage.removeItem(k.key);
  });
}