这是 this 的后续问题
我开始使用 localStorage 函数, 并且不确定它是否按预期工作。
我想覆盖我的 JSON 文件中的 bool 值。
Player在一个stage中点击exit,然后触发下一个stage的load, 但我也希望它能保存阶段已完成的事实。
这是我的 JSON 数组,默认情况下定义所有地牢都是不完整的:
var dungeon_prog = {
"dungeon0_prog" : {
"complete" : true
},
"dungeon1_prog" : {
"complete" : false
},
"dungeon2_prog" : {
"complete" : false
}
};
然后我将它设置为本地存储:
localStorage.setItem('dungeon_prog', JSON.stringify(dungeon_prog));
var dungeon_prog_obj = JSON.parse(localStorage.dungeon_prog);
我希望它在玩家到达地牢 1 的导出时将 dungeon1_prog "complete"false
覆盖为 true
。
我该怎么做? 默认的“假”语句是否实际保存在 localStorage 中? 谢谢。
最佳答案
dungeon_prog_obj
现在包含您的 JSON 对象。要回答您的最后一个问题,是的 - localStorage 保存了整个 JSON 字符串,因此它也保存了 bool 值。
要覆盖它,您只需设置 bool 值并将它们再次保存到同一个 localStorage 项目:
dungeon_prog_obj.dungeon1_prog.complete = true;
localStorage.setItem('dungeon_prog', JSON.stringify(dungeon_prog_obj));
编辑:
根据要求更新以回答评论中的问题。
我不是 100% 确定这是问题所在,但您是说在页面刷新时 true
值不会持续存在。唯一合理的解释是,在每次加载页面时,您都使用 localStorage.setItem('dungeon_prog', JSON.stringify(dungeon_prog));
将 JSON 覆盖为初始页面,其中 dungeon_prog
是您问题中指定的初始 JSON。
如果您在 localStorage
中有该项目,您应该检查负载而不是这样做。您可以通过以下方式执行此操作:
// Check for object in localStorage
var dungeon_prog = JSON.parse(localStorage.dungeon_prog);
// If it does not exist, initialize it and save it
if (dungeon_prog != null) {
dungeonProg = {
"dungeon0_prog" : {
"complete" : true
},
"dungeon1_prog" : {
"complete" : false
},
"dungeon2_prog" : {
"complete" : false
}
};
localStorage.setItem('dungeon_prog', JSON.stringify(dungeon_prog));
}
关于javascript - 用 JSON 覆盖 localStorage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20607817/