本地存储覆盖问题

时间:2016-10-03 01:25:51

标签: javascript arrays json web

我一直在测验应用程序,我只允许使用javaScript。该应用程序的工作方式就像我要求用户选择用户名并将其保存在变量中并且他/她开始回答并且得分越来越高并且也被保存在得分变量中。稍后一旦游戏结束我正在打印消息并且必须呈现5个最高分用户。为此我使用的是本地存储,问题是当我保存数据时工作正常,但是当我重新启动或再次播放时,数据被覆盖。例如,第一个用户名被更新的播放器替换。我保存数据的代码是;

      var obj = convertUserAndScore(user, score);
      var players = new Array;

      players.sort(function(a, b){
        return a.score - b.score;
      });


      players.push(JSON.stringify(obj));

      localStorage.setItem("players", players);


      function convertUserAndScore(user, score) {

         return { "usename": user , "score": score};
      }

1 个答案:

答案 0 :(得分:0)

有几个问题。

首先,您始终初始化一个空数组...并且永远不会从localStorage

获取存储的数据

接下来,您将获取该空数组并立即将其存储在localStorage中。这肯定会覆盖您实际存储长度为

的数组的任何其他时间

当你需要对整个数组进行字符串化时,你要在数组中对字符串进行字符串化

让我们从页面加载开始:

var localData = localStorage.getItem("players");
// if defined then parse stored data or use empty array
var players = localData ? JSON.parse(localData ) : [];

现在当你做一些改变数组的事情时,你需要对整个事物进行字符串化

var somObj= //...
players.push(somObj);
localStorage.setItem("players", JSON.stringify(players));