首页 > 解决方案 > 将 localStorage 转换为字符串并从中删除特定元素

问题描述

将内容导出localStorage为字符串并从中删除特定键值对的方法是什么?

也就是说,我只需要保留那些值为likeor的键dislike。应删除其他键。

换句话说,结果字符串应该是

"anne":"dislike","jane":"like","john":"like","mike":"dislike"
// the order doesn't matter
localStorage.clear();
localStorage.setItem('anne', 'dislike');
localStorage.setItem('jane', 'like');
localStorage.setItem('john', 'like');
localStorage.setItem('mike', 'dislike');
localStorage.setItem('abcd', 'foo');
localStorage.setItem('efgh', 'bar');

// this may be useful for something . . .
const stringified = JSON.stringify(localStorage);

Object.keys(localStorage).forEach(function(key) {
  const value = localStorage.getItem(key);
  if (value === 'like' || value === 'dislike') {
    // what should be here?
  }
});

我花了一天时间尝试以下链接的解决方案:

但我还是想不通。

我不想更改local Storage. 我只想将其导出为“干净”字符串。

标签: javascriptlocal-storage

解决方案


localStorage.clear()
localStorage.setItem('anne', 'dislike')
localStorage.setItem('jane', 'like')
localStorage.setItem('abcd', 'foo')
localStorage.setItem('efgh', 'bar')

function getStorage() {
  const data = {}
  let i = localStorage.length
  while (i--) {
    let key = localStorage.key(i)
    let value = localStorage.getItem(key)
    if (/^(like|dislike)$/i.test(value)) {
      data[key] = value
    }
  }
  return data
}

console.log(getStorage())
// {
//   anne: "dislike",
//   jane: "like"
// }

推荐阅读