这是this
的后续问题我开始使用localStorage功能, 我不确定它是否按预期工作。
我想在我的JSON文件中覆盖一个布尔值。
玩家在某个阶段遇到退出,然后它会触发下一个阶段的加载, 但我也想要它保存舞台完成的事实。
这是我的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“完整”false
覆盖为true
。
我该怎么做? 实际上是否在localStorage中保存了默认的“false”语句? 感谢。
答案 0 :(得分:2)
dungeon_prog_obj
现在拥有您的JSON对象。要回答你的上一个问题,是的 - localStorage会保存整个JSON字符串,因此它也会保存布尔值。
要覆盖它,您只需设置布尔值,然后再次保存到同一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));
}