2012-03-31 9 views
0

Ich habe folgende verwendet, um eine Dummy-Highscore-Tabelle zu erstellen, wenn wenn localscores nicht im lokalen Speicher vorhanden ist:Javascript lokale Speicher herausfinden, ob existiert

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") 
} 

ich immer 10 Werte erhalten will, so ich habe dies eine Partitur hinzuzufügen, wobei Benutzername und insgesamt ist der Name eingegeben und erzielte Score:

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); 

Alles ist gut, bis ich das Spiel und die erste Funktion läuft neu zu laden, so scheint es, null Wert auf das Highscores Array hinzuzufügen. Also, wenn ich 5 zusätzliche Punkte addiere, habe ich 3 Nullwerte im Array?

[Objekt, Objekt, Objekt, Objekt, Objekt, Objekt, Objekt, Objekt, Objekt, Objekt, null, null, null, null, null]

Dies führt mich entweder die Linie zu glauben, wo ich bewerten wenn die localscores vorhanden ist falsch (localStorage.getItem ("localScores") === null)

Oder wo ich das 11. Element in dem Feld löschen ist falsch Highscores löschen [10];

Oder es gibt ein anderes Problem, das ich nicht sehe, wenn jemand weiß, was vor sich geht, würde ich etwas Hilfe schätzen.

Antwort

4

Wenn Sie delete für eine Array-Instanz aufrufen, wird das Array nicht kürzer, sondern Sie ersetzen den Wert am angegebenen Index einfach durch .

Wenn die Länge von highscores immer nicht größer als 10 sein sollte und der zu entfernende Artikel immer der letzte sein soll, können Sie einfach highscores.length = 10 verwenden.

Sie könnten auch highscores = highscores.slice(0,10); verwenden, aber wie jfriend00 darauf hingewiesen, es beinhaltet den zusätzlichen Aufwand beim Erstellen eines neuen Arrays.

Obwohl ich gezwungen bin zu erwähnen, dass die Leistungssteigerung beim Erstellen eines neuen Arrays ist nur ein Tropfen auf den heißen Stein im Vergleich zu der Menge an Arbeit wird der Browser tun, um JSON zu codieren/decodieren und von localStorage lesen/schreiben , die notorisch langsam ist.

+0

scheint es zu sein, dank – mao

+0

Diese das 'highscores' zum Trimmen auch funktionieren würden:' if (highscores.length> 10) {highscores.length = 10;} 'und das nicht machen würde, eine Kopie des Arrays wie '.slice()' tut. – jfriend00

3

Sie könnten Highscores verwenden. pop() statt delete highscores[10];

Verwandte Themen