Javascript локальное хранилище выяснить, если существует - PullRequest
0 голосов
/ 31 марта 2012

Для создания фиктивной таблицы рекордов используется следующее, если в локальном хранилище не существует 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);

Все хорошо, пока я не перезагружаю игру и не запускается первая функция, кажется, что она добавляет нулевое значение в массив рекордов. Так что, если я добавлю 5 дополнительных оценок, у меня будет 3 нулевых значения в массиве?

[Объект, Объект, Объект, Объект, Объект, Объект, Объект, Объект, Объект, Объект, Объект, ноль, ноль, ноль, ноль, ноль]

Это наводит меня на мысль, что либо строка, где я оцениваю, существует ли локальная оценка, неверна (localStorage.getItem ("localScores") === null)

Или где я удаляю 11-й элемент в массиве неправильно удалить рекорды [10];

Или есть еще одна проблема, которую я не вижу, если кто-нибудь знает, что происходит, я очень признателен за помощь.

Ответы [ 2 ]

4 голосов
/ 31 марта 2012

Когда вы вызываете delete для экземпляра Array, вы фактически не делаете массив короче, вы просто заменяете значение по указанному индексу на undefined.

Если длина highscores всегда должно быть не больше 10, и удаляемый элемент всегда будет последним, вы можете просто использовать highscores.length = 10.

Вы также можете использовать highscores = highscores.slice(0,10);, но, как указал jfriend00, онэто действительно связано с дополнительными затратами на создание нового массива.

Хотя я вынужден упомянуть, что снижение производительности при создании нового массива - это просто капля в море по сравнению с объемом работы, который будет выполнять браузер.делать кодирование / декодирование JSON и чтение / запись из localStorage, что, как известно, медленно.

3 голосов
/ 31 марта 2012

Вы можете использовать рекорды. pop () вместо delete highscores[10];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...