使用localStorage

时间:2018-07-03 10:03:41

标签: javascript

单击链接时,我可以选择带有单个ID的选项,这些ID要作为对象存储在localStorage中。

在链接上单击我运行功能:

let obj = {};
    if(options.length) {

              for(let i = 0; i < options.length; i++) {
                let item = options[i];

                    obj[item._id] = null;
                }

                  localStorage.setItem('key', JSON.stringify(obj));
    }

单击链接后,将打开弹出的窗口,单击该按钮会为对象的属性之一添加值。

此功能如下所示。

  let data = JSON.parse(localStorage.getItem('key'));
              for(let p in data) {
                if($location.search().item === p) {
                  data[p] = response.data;
                  localStorage.setItem('key', JSON.stringify(data));
                }
              }  

我希望能够对每个选择执行此操作,并将对应的response.data存储到每个id。 现在的问题是,当我第二次单击链接时,所有存储的值都变为null,因为我认为这是

obj[item._id] = null;

如何保持已经设置的值不变?

对象的结构如下:

let obj = {
1: 'response1',
2: 'response3'
}

1 个答案:

答案 0 :(得分:1)

假设您要处理的是重新初始化中的覆盖内容,Steffi处在正确的轨道上,但是array_key_exists在javascript中不存在。另外,您还需要从localStorage读取当前值,以了解已设置的字段。

let obj = JSON.parse(localStorage.getItem('key')) || {};
// [...]
obj[item._id] = obj[item._id] || null;

应该做的:不要覆盖已经存在的项目。更好的是,假设选项不会随时间变化,为什么还要重新初始化:

if(options.length && !localStorage.getItem('key'))

此外,是否有理由遍历所有数据键并多次调用搜索?可能会引起一些问题,可能不会。这样的事情可能适合您的情况:

let data = JSON.parse(localStorage.getItem('key'));
const item = $location.search().item
if(data[item]) data[item] = response.data;
localStorage.setItem('key', JSON.stringify(data));