javascript本地存储找出是否存在

时间:2012-03-31 00:20:28

标签: javascript local-storage

如果本地存储中不存在localscores,我有以下用于创建虚拟高分表:

if (localStorage.getItem("localScores") === null) {

highscores = [
  {user: "Player 1", score: 100},
  {user: "Player 2", score: 90},
  {user: "Player 3", score: 80},
  {user: "Player 4", score: 70},
  {user: "Player 5", score: 60},
  {user: "Player 6", score: 50},
  {user: "Player 7", score: 40},
  {user: "Player 8", score: 30},
  {user: "Player 9", score: 20},
  {user: "Player 10", score: 10}
  ];
  localStorage['localScores']=JSON.stringify(highscores);
  console.log("doesn't exist")
}

else{
highscores = JSON.parse(localStorage['localScores']);
console.log("exists")
}

我总是希望保持10分,所以我要添加一个分数,其中用户名和总数是输入的名称和得分:

highscores.push({user: username, score: total});                               
highscores.sort(function(a,b){ return b.score - a.score});    
delete highscores[10];
localStorage['localScores']=JSON.stringify(highscores);
console.log(highscores);

在我重新加载游戏并运行第一个函数之前,一切都很好,它似乎为highscores数组添加了空值。所以,如果我添加5个额外的分数,我将在数组中有3个空值?

[Object,Object,Object,Object,Object,Object,Object,Object,Object,Object,null,null,null,null,null]

这让我相信,如果localscores存在,我评估的行是错误的     (localStorage.getItem(“localScores”)=== null)

或者删除数组中第11个元素的地方是错误的         删除高分[10];

或者还有其他一些我看不到的问题,如果有人知道发生了什么,我会非常感谢你的帮助。

2 个答案:

答案 0 :(得分:4)

当您在Array实例上调用delete时,实际上并没有缩短数组,只需用undefined替换指定索引处的值。

如果highscores的长度始终不超过10,并且要删除的项目始终是最后一项,则只需使用highscores.length = 10

您也可以使用highscores = highscores.slice(0,10);,但正如jfriend00指出的那样,它确实涉及创建新数组的额外开销。

尽管如此,我觉得有必要提一下,与浏览器编码/解码JSON和从localStorage读/写所做的工作量相比,创建新阵列的性能真的只是一滴水,这是出了名的慢。

答案 1 :(得分:3)

您可以使用高分。pop()代替delete highscores[10];