javascript本地存储查找是否存在
如果本地存储中不存在localscores,我可以使用以下方法创建虚拟高分表:javascript本地存储查找是否存在,javascript,local-storage,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:
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个空值
[对象,对象,对象,对象,对象,对象,对象,对象,对象,对象,对象,空,空,空,空,空]
这让我相信,我评估localscores是否存在的那一行是错误的
(localStorage.getItem(“localScores”)==null)
或者我删除数组中的第11个元素是错误的
删除高分[10]
或者还有一些我没有看到的问题,如果有人知道发生了什么,我非常感谢您的帮助。当您在数组实例上调用
delete
时,实际上并没有缩短数组,您只需将指定索引处的值替换为undefined
如果highscores
的长度应始终不大于10,并且要删除的项目始终是最后一个,则您可以简单地使用highscores.length=10
您还可以使用highscores=highscores.slice(0,10)代码>,但正如jfriend00指出的,它确实涉及到创建新数组的额外开销
尽管如此,我还是不得不指出,与浏览器编码/解码JSON和从本地存储读取/写入的工作量相比,创建新阵列对性能的影响实际上只是杯水车薪,这是出了名的缓慢。您可以使用高分。而不是删除高分[10]
这也适用于修剪高分
:如果(highscores.length>10){highscores.length=10;}
,这不会像.slice()
那样复制数组。