2015-10-05 73 views
2

我正在为我的项目开发一个HTML5游戏,我的问题在评分系统中。
我想显示十大最佳评分者(已排序)。我目前正在使用JSON中的Array。如何将数组存储在localStorage(Javascript)中的JSON?

现在我要救JSON数组中的localStorage

var storage = '{"Players":[' + 
     '{"score":"0","Name":"Player 2"},' + 
     '{"score":"0","Name":"Player 4"},' + 
     '{"score":"0","Name":"Player 1"}]}'; 

var obj = JSON.parse(storage); 

obj['Players'].push({"score": 13,"Name": "Player1"}); 
obj['Players'].push({"score": 523,"Name": "Player2"}); 
obj['Players'].push({"score": 3,"Name": "Player3"}); 
obj['Players'].push({"score": 1235,"Name": "Player4"}); 

storage = JSON.stringify(obj); 

var sortColumnScore = "score"; 

function SortByScore(x,y) { 
    return ((x[sortColumnScore] == y[sortColumnScore]) ? 0 : ((x[sortColumnScore] < y[sortColumnScore]) ? 1 : -1)); 
} 

obj.Players.sort(SortByScore); 

for (var i = 0; i < 5; i++) { 
    document.getElementById("s"+ (i+1)).innerHTML = 
    obj.Players[i].score; 
    document.getElementById("p"+ (i+1)).innerHTML = 
    obj.Players[i].Name; 
}; 
+0

没有关于本地存储的代码。 –

+0

我不知道该从哪里开始localStorage。 这就是为什么我在寻找一些帮助。 :) –

+0

所以代码片段是完全不相关的,只是检查 –

回答

0

不能包含对象或数组的localStorage的。但是你可以将它转换成一个字符串。

// Store the object 
localStorage.myObject = JSON.stringify(myObject); 

// Read the object 
var myObject = JSON.parse(localStorage.myObject); 
+0

是的,但我如何再次访问它以便我可以对它进行排序并将其显示在我的项目中? –

+0

使用行'读取对象' – Magus

+0

我解析对象后,我可以像这样访问数组? 'obj.Players [0] .score' –

0

获取一个项目从localStorage

var str = localStorage.getItem('my-item'); 

存储项目中localStorage

localStorage.setItem('my-item', str); 

注意:您只能字符串保存到本地存储,这样,你将需要通过JSON.stringify将您的数据转换为字符串,然后使用从localStorage中检索字符串时的。

+0

解析后,我可以像这样再次访问对象吗? 'obj.Players [i] .score' –

+0

@DarbsLingo是啊,你可以:) – Buzinas

+0

好吧谢谢,我现在试试看。 (y) –

1

基本上你应该使用本地存储,就像你上面做的storage一样。您可以像使用@Magus一样以对象方式使用localstorage,或以关联数组的方式使用localstorage,调用其基元getItem,setItem

简单的用法:

var storage = '{"Players":[' + 
    '{"score":"0","Name":"Player 2"},' + 
    '{"score":"0","Name":"Player 4"},' + 
    '{"score":"0","Name":"Player 1"}]}'; 

var obj = JSON.parse(storage); 

obj['Players'].push({"score": 13,"Name": "Player1"}); 
obj['Players'].push({"score": 523,"Name": "Player2"}); 
obj['Players'].push({"score": 3,"Name": "Player3"}); 
obj['Players'].push({"score": 1235,"Name": "Player4"}); 

localStorage.setItem('Players', JSON.stringify(obj)); 

然后得到localStorage的数据调用:

var myobj = JSON.parse(localStorage.getItem('Players')); 

高级应用:

对于正确的用法(加上当前用户会话)并初始化localstorage/sessionstorage(根据您的目标)请参阅@ War10ck在此问题Push JSON Objects to array in localStorage之后的评论。

+0

如果我刷新页面,数据是否会保留? –

+0

有关这些问题,请参阅@Buzinas [Mozilla文档](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)引用的文档。无论如何,即使关闭窗口并在稍后重新打开,localStorage也会保留数据。 sessionStorage只保留数据在同一会话中(即浏览器的相同选项卡),而不是。 – morels

相关问题