操纵localStorage?

时间:2017-12-04 00:03:57

标签: javascript

假设我有一个与此类似的javascript对象:

var Upgrades = {
     upgrade1: {
          name: 'First Upgrade',
          info: 'First Upgrades info',
          level: 1,
          cost: 10,
     },
     upgrade2: {
          name: 'Second Upgrade',
          info: 'Second Upgrades info',
          level: 1,
          cost:  200,
     },
     upgrade3: {
          name: 'Second Upgrade',
          info: 'Second Upgrades info',
          level: 1,
          cost: 4000,
     },
};

现在,将其保存到localStorage将是一件轻而易举的事。

localStorage.setItem('Upgrades', JSON.stringify(Upgrades));

问题是我每次升级都需要保存级别的值。保存整个对象会带来一些问题,其中一些是:

- 如果我想更改对象中的名称/信息,我必须删除我保存的本地存储文件,因为它会覆盖每个存储过的旧名称/信息的升级对象。时间玩家进入游戏。

- 为对象添加更多东西(升级)也会因为某些原因而崩溃游戏,我不太清楚为什么。每当我向对象添加更多升级时,我必须再次删除已保存的文件才能播放,从开始

(或更改已保存的文件,如果它与当前对象不同,那么它会正确应用保存,但我不知道该怎么做。这听起来有点讨厌,因为我猜你和#39;必须检查对象中的游戏版本是否相同,如果它没有编辑,那么它对应于当前版本对象。

对象中的所有内容都是根据级别(字符串除外)计算的。这就是我只需要保存等级的原因。

我如何操纵本地存储? 我想循环遍历所有升级,并将每个级别值保存到不同的localStorage中。所以localStorage升级1,2和3,只包含'级别:x'。然后同样循环,当玩家开始游戏以应用保存的等级。 但是,我只能使用1个localStorage文件吗?用上面的例子来做它会不好,为什么?还有更好的方法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

我猜你可以从js对象中推断出你需要的信息并将它们保存在localStorage中,例如:

var _uogradesStored = {
     upgrade1: {
          level: 1
     },
     upgrade2: {
          level: 1
     },
     upgrade3: {
          level: 1
     }
};

然后当您从存储中检索对象时,迭代“升级”项并获取所需的级别属性信息。

答案 1 :(得分:0)

我会升级一个数组并将该级别保存为选定版本的单独项目/索引。