我一直在测试应用程序,我只允许使用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};
}
几个问题
首先你总是初始化一个空数组…并且永远不会从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));