Member 13257242 Ответов: 2

Как использовать localstorage для массивов в javascript


- Привет! Я пытаюсь использовать локальное хранилище для сохранения одного из моих массивов, pokemonchosen.вот этот код:

var pokemonchosen = [];


Как бы я добрался туда, где, если обновить или закрыть браузер, массив pokemonchosen останется таким же, как есть? Но у меня есть более странная проблема, чем у других, pokemonchosen не имеет ценности, пока кто-то не купит покемона, и в этом случае:

pokemonchosen.push("Charmander");


Как бы я сделал это там, где устанавливает локальное хранилище на покупку покемона? Это одна из многих функций для покемонов:

function buymagikarp() {
  if(coins >= 100 ) {
    swal("Success", "You bought 1 magikarp!", "success");
    coins -= 100;
    pokemonchosen.push("Magikarp");
    document.getElementById("p1").innerHTML = "Coins: " + coins;   
    localStorage.setItem('coins', coins);
  } else {
    swal("Error", "Not enough balance", "error");
  }
}


Спасибо :-)

Что я уже пробовал:

if(pokemonchosen != undefined) {
var JSONReadyUsers = JSON.stringify(pokemonchosen);
localStorage.setItem('pokemonchosen', JSONReadyUsers)
}

ZurdoDev

localStorage.setItem('pokemonchosen', JSONReadyUsers) должен работать, так в чем же проблема?

2 Ответов

Рейтинг:
2

Thomas Daniels

Ваш код в разделе "Что я пробовал" будет работать, так что у вас это уже есть! Вот как вы можете снова загрузить массив:

pokemonchosen = JSON.parse(localStorage.getItem('pokemonchosen'));

В формате JSON.метод Parse() - JavaScript-кода | МДН[^]


Member 13257242

Куда бы я это положил? внутри или снаружи оператора if?

Thomas Daniels

Этот код (т. е. getItem) должен запускаться при загрузке вашей страницы, чтобы восстановить выбранных покемонов.

А для setItem вы должны запускать его каждый раз, когда "pokemonchosen" обновляется.

Member 13257242

Кроме того, pokemonchosen начинается с undefined, поэтому, когда они покупают покемона, все в операторе if должно быть выполнено правильно?

Member 13257242

Это дает мне ошибку:
Uncaught ReferenceError: JSONReadyUsers не определен
в buymagikarp (script.js:35)
в HTMLInputElement.onclick (battle.html:131)

Я уверен, что это означает, что Jquery не работает. Вот бирки, которые я положил внутрь battle.html :
&ЛТ;скрипт СРЦ="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"&ГТ;&ЛТ;/скрипт>&амп;скрипт тип="текст/JavaScript"&ГТ;функция getName2 {
ВАР JSONReadyUsers = формат JSON.преобразовать в строки(pokemonchosen);
localStorage.setItem('pokemonchosen', JSONReadyUsers)
}</script>

Thomas Daniels

Ну, если вы используете JSONReadyUsers вне getName2, это не будет работать, потому что область действия JSONReadyUsers-это только getName2.

Member 13257242

Даже после определения JSONReadyUsers вне getName2 как в теге скрипта, так и в теге script.js-это все равно не сработает.

Thomas Daniels

Ну, вам не нужно определять это дважды... И что значит "не сработает"?

Member 13257242

"не будет работать" означает, что я все еще получаю ту же ошибку: вот мой сайт, если вы хотите проверить его и увидеть ошибку pokemonupgrade.000webhostapp.com

Thomas Daniels

Я не собираюсь отлаживать ваш сайт, извините.

Ошибка говорит то, что она говорит: "JSONReadyUsers" не определен. Посмотрите, где вы его определяете, где вы его используете и где происходит ошибка, а затем подумайте о том, почему он не будет определен там, где происходит ошибка.

Member 13257242

Это все еще не работает. Я немного исправил код и добавил его в каждую из функций покупки:

функция buymagikarp() {
если(монеты >= 100 ) {
swal("успех", "вы купили 1 magikarp!", "успех");
монеты -= 100;
document.getElementById("p1").innerHTML = "Coins:" + coins;
localStorage.setItem('монеты', монеты);
} еще {
swal("ошибка", "недостаточно баланса", "ошибка");
}
если(pokemon1 == "") {
pokemon1 += "Magikarp";
localStorage.setItem('Magikarp', pokemon1);
}
if (localStorage.getItem("pokemon1") === null) {
хранилище localStorage.метод getitem('pokemon1');
}
}

Я действительно не понимаю, почему это не работает. Вы, вероятно, уже понимаете мой уровень мастерства в этом типе кода, но я не могу объяснить, почему мой код не работает. Пожалуйста, помогите!

Thomas Daniels

Я понятия не имею, что вы пытаетесь сделать (и "не работает" вообще не дает никакой информации), но какой смысл вызывать getItem('pokemon1') в операторе if, если getItem("pokemon1") равен null? Он ничего не делает.

Рейтинг:
2

Member 14930975

Вы должны сначала объявить "монеты" как переменную, прежде чем сможете ее использовать.
пример: var coins = localStorage.getItem ('монеты');