• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JavaScript - JSON.parse nie diała przy 2 próbie zmainy

Object Storage Arubacloud
0 głosów
223 wizyt
pytanie zadane 12 października 2019 w JavaScript przez Paweł Szewczyk Obywatel (1,410 p.)

Mam funkcje, która wykorzystuje JSON.parse do przechowywania zmiennych między umiejącymi się stronami html

fragment kodu:

    var randomNumber = [];
    var randomWordPl = [];
		var randomAngWord = [];
    var randomWordAng = [];
    var gameCounter;
    var userInput;
    var randomWordAng2;
    var randomWordPl2

    gameCounter = localStorage.getItem("gameCounter");
    loopCounter = localStorage.getItem("loopCounter");
    userInput = localStorage.getItem("userInput");
    randomWordAng = JSON.parse(localStorage.getItem("randomWordAng"));
    randomNumber = JSON.parse(localStorage.getItem("randomNumber"));
    randomWordPl = JSON.parse(localStorage.getItem("randomWordPl"));

		console.log("loopCounter:"+loopCounter);
		console.log("randomNumber:"+randomNumber[loopCounter]);
    console.log(randomWordAng);
    console.log(randomWordPl);
		// isEmpty();

    if (loopCounter != randomWordAng.length) { //jezeli loopCounter nie jest rowny kontynuuj iteracja petli *w załozeniu do mamentu w którym nie bedzie rowna
            $("#randomWord_wordPl").html(randomWordAng[loopCounter]);
            if (userInput == randomWordAng[loopCounter]) {
                $("#Logic_wordAng").html(randomWordAng[loopCounter]);
                $("#Logic_mark").html("Dobrze");
                $("#Logic_userInput").html(localStorage.getItem("userInput"));
                $("#Logic_wordPl").html(randomWordPl[loopCounter]);//Nie poprawne wyswietlanie słowa nie do tekstu
                randomWordAng2 = randomWordAng.splice(loopCounter, 1);
                randomWordPl2 = randomWordPl.splice(loopCounter, 1);
                JSON.parse(localStorage.setItem("randomWordAng",JSON.stringify(randomWordAng)));
                JSON.parse(localStorage.setItem("randomWordPl",JSON.stringify(randomWordPl)));
                localStorage.getItem("randomWordAng");
                localStorage.getItem("randomWordPl");
                loopCounter--;
                loopCounter--;
                gameCounter--;
                localStorage.setItem("loopCounter",loopCounter);
                localStorage.setItem("gameCounter",gameCounter);
            }

ale problem jest w tym fragmecie 

JSON.parse(localStorage.setItem("randomWordAng",JSON.stringify(randomWordAng)));
                JSON.parse(localStorage.setItem("randomWordPl",JSON.stringify(randomWordPl)));

pierwsza funkcja działa bez problemu, ale 2 jest jakby zagłuszana przez te pierwsza w rezulatcie pokazuje sie tylko randomWordAng a randomWordPl jest pomijane i sie nie wykonuje  jak mogę to naprawic ?

1 odpowiedź

0 głosów
odpowiedź 12 października 2019 przez adrian17 Ekspert (344,860 p.)
Wywołujesz JSON.parse na wyniku setItem, co nie ma za bardzo sensu - setItem nic nie zwraca.
komentarz 13 października 2019 przez Paweł Szewczyk Obywatel (1,410 p.)

Funkcja jest odtwarzana kilka razy w programie wiec dana sa odczytywane przy 2 wlaczeniu

randomWordAng = JSON.parse(localStorage.getItem("randomWordAng"));
randomNumber = JSON.parse(localStorage.getItem("randomNumber"));
randomWordPl = JSON.parse(localStorage.getItem("randomWordPl"));
 

ale problem polega na tym ze gdy wpisze 

  JSON.parse(localStorage.setItem("randomWordAng",JSON.stringify(randomWordAng)));
  JSON.parse(localStorage.setItem("randomWordPl",JSON.stringify(randomWordPl)));

 to kod jaki otrzymuje po wykonaiu tego to 

(19) ["shoplifting", "cuff", "murder case", "at gunpoint", "sentence sombady to", "deduce", "punish", "suspect", "tick off", "murderer", "make statements under oath", "clever diagnosis", "hold up", "robbery", "indicate", "avidence", "author", "threaten", "escape"]

(20) ["rabowac", "kradzierz sklepowa", "mankiet", "sprawa o morderstwo", "pod grozba uzycia broni", "skazywac kogos na", "wnioskowac", "karac kogos", "podejrzany", "dawac reprymende", "morderca", "zeznawac pod przysiega", "inteligentan diagnoza", "napad rabunkowy", "napad", "wskazywac", "dowody", "autor", "grozic", "uciekac"]

jezeli odwróce zapis 

JSON.parse(localStorage.setItem("randomWordPl",JSON.stringify(randomWordPl)));  
JSON.parse(localStorage.setItem("randomWordAng",JSON.stringify(randomWordAng)));
  

wtedy output wyglada tak:

(20) ["rob","shoplifting", "cuff", "murder case", "at gunpoint", "sentence sombady to", "deduce", "punish", "suspect", "tick off", "murderer", "make statements under oath", "clever diagnosis", "hold up", "robbery", "indicate", "avidence", "author", "threaten", "escape"]

(19) ["kradzierz sklepowa", "mankiet", "sprawa o morderstwo", "pod grozba uzycia broni", "skazywac kogos na", "wnioskowac", "karac kogos", "podejrzany", "dawac reprymende", "morderca", "zeznawac pod przysiega", "inteligentan diagnoza", "napad rabunkowy", "napad", "wskazywac", "dowody", "autor", "grozic", "uciekac"]

wiec jadna funkcja jest wykonywana a 2 przysłaniana przez nia 

komentarz 13 października 2019 przez adrian17 Ekspert (344,860 p.)

jezeli odwróce zapis 

Zupełnie nic nie zrozumiałem z tego. W obu dolnych blokach kodu wywołujesz JSON.parse na wyniku setItem, co - jak wcześniej mówiłem - nie ma sensu. Jedyne co zmieniłeś to ich kolejność.

Nie za bardzo rozumiem co chcesz osiągnąć.

Ta linia w Twoim kodzie też nic nie robi:

localStorage.getItem("randomWordAng");

 

komentarz 13 października 2019 przez Paweł Szewczyk Obywatel (1,410 p.)

Jestem poczatkujacy w JS. W takim razie jak moge to zrobic w sensie usunac wartosc z randomWordAng i randomWordPl w komórce o wartosci loopCounter (np:. chce usunac rob i rabowac) i wysałac to potem do local storage? 

Tutaj podaje całą funkcje:.

function setingWord() {
    var randomNumber = [];
    var randomWordPl = [];
		var randomAngWord = [];
    var randomWordAng = [];
    var gameCounter;
    var userInput;
    var randomWordAng2;
    var randomWordPl2

    gameCounter = localStorage.getItem("gameCounter");
    loopCounter = localStorage.getItem("loopCounter");
    userInput = localStorage.getItem("userInput");
    randomWordAng = JSON.parse(localStorage.getItem("randomWordAng"));
    randomNumber = JSON.parse(localStorage.getItem("randomNumber"));
    randomWordPl = JSON.parse(localStorage.getItem("randomWordPl"));

		console.log("loopCounter:"+loopCounter);
		console.log("randomNumber:"+randomNumber[loopCounter]);
    console.log(randomWordAng);
    console.log(randomWordPl);
		// isEmpty();

    if (loopCounter != randomWordAng.length) { //jezeli loopCounter nie jest rowny kontynuuj iteracja petli *w załozeniu do mamentu w którym nie bedzie rowna
            $("#randomWord_wordPl").html(randomWordAng[loopCounter]);
            if (userInput == randomWordAng[loopCounter]) {
                $("#Logic_wordAng").html(randomWordAng[loopCounter]);
                $("#Logic_mark").html("Dobrze");
                $("#Logic_userInput").html(localStorage.getItem("userInput"));
                $("#Logic_wordPl").html(randomWordPl[loopCounter]);//Nie poprawne wyswietlanie słowa nie do tekstu
                randomWordAng2 = randomWordAng.splice(loopCounter, 1);
                randomWordPl2 = randomWordPl.splice(loopCounter, 1);
                console.log(randomWordPl.splice(loopCounter, 1));
                JSON.parse(localStorage.setItem("randomWordAng",JSON.stringify(randomWordAng)));
                JSON.parse(localStorage.setItem("randomWordPl",JSON.stringify(randomWordPl)));
                alert(JSON.parse(localStorage.getItem("randomWordAng")));
                alert(JSON.parse(localStorage.getItem("randomWordPl")));
                localStorage.getItem("randomWordAng");
                localStorage.getItem("randomWordPl");
                console.log("elo");
                console.log(loopCounter);
                loopCounter--;
                gameCounter--;
                console.log(localStorage.getItem(loopCounter));
                localStorage.setItem("loopCounter",loopCounter);
                localStorage.setItem("gameCounter",gameCounter);
            } else {
                // console.log(wordAng[randomNumber[loopCounter]]);
                $("#Logic_wordAng").html(randomWordAng[loopCounter]);
                $("#Logic_mark").html("Zle");
                $("#Logic_userInput").html(localStorage.getItem("userInput"));
                $("#Logic_wordPl").html(randomWordPl[loopCounter]);
            }

    } else if (loopCounter==gameCounter && randomWordAng.length==0){
			let hrefMonth = "index.html";
	    window.location.href = hrefMonth;
		} if (loopCounter >= randomWordAng.length){
      console.log("wyzeruj");
        localStorage.setItem("loopCounter", 0);
    }
}

 

komentarz 13 października 2019 przez adrian17 Ekspert (344,860 p.)

Na oko, to robiłeś splice() ale nic nie robiłeś z jego wynikiem.

let randomWordAng2 = randomWordAng.splice(loopCounter, 1);
let randomWordPl2 = randomWordPl.splice(loopCounter, 1);
localStorage.setItem("randomWordAng", JSON.stringify(randomWordAng2));
localStorage.setItem("randomWordPl", JSON.stringify(randomWordPl2));

A z bocznych uwag:

$("#Logic_userInput").html(userInput);

Na pewno chcesz, żeby user mógł dodawać własny <b>kod html</b> do strony? Raczej .text() powinno być domyślnie używane.

var randomNumber = [];
randomNumber = JSON.parse(localStorage.getItem("randomNumber"));

po co w osobnych liniach?

komentarz 13 października 2019 przez Paweł Szewczyk Obywatel (1,410 p.)
Jasne dzieki za rady. Ale jak moge zapisac do localStorage zmieniana wersje tablicy z usunietymi słowami ?
komentarz 13 października 2019 przez adrian17 Ekspert (344,860 p.)
Um... pokazałem Ci w powyższej odpowiedzi. Spójrz na nią jeszcze raz.
komentarz 13 października 2019 przez Paweł Szewczyk Obywatel (1,410 p.)
Ok wielkie dzieki za pomoc kod juz działa odpisywanle z telefonu i nie zauwazyłem kodu

Podobne pytania

0 głosów
1 odpowiedź 285 wizyt
pytanie zadane 4 listopada 2018 w JavaScript przez Quetrino Nowicjusz (150 p.)
0 głosów
1 odpowiedź 575 wizyt
0 głosów
2 odpowiedzi 841 wizyt
pytanie zadane 29 grudnia 2017 w JavaScript przez revizor451 Obywatel (1,930 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...