单击链接时,我可以选择带有单个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'
}
答案 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));