Było kiedyś, jeszcze w latach 80. i pewnie 90. takie pismo "Bajtek". Pamiętam, że ludzie tam posyłali swoje (zazwyczaj proste) programy do analizy i oceny. Recenzje W. Zientary (chyba to on je pisał) czytałem z zapartym tchem. Nie dlatego, że były szczególnie ciekawe (choć dla mnie wówczas były) - ale dlatego, że sporo się przy tym uczyłem. Poza tym wielu innych źródeł wiedzy nie miałem.
Sam się teraz, przed snem, zabawię w takiego recenzenta. (Ach, wspomnienia...) Gdybym się gdzieś pomylił, to z góry przepraszam - późno już i zmęczony jestem.
Patrząc na Twój kod:
const tablica = new Array(...);
A dlaczego nie prościej:
const tablica = [...];
W tym przypadku różnicy pomiędzy new Array a [] nie ma (poza tym, że to więcej kodu do pisania; tu ze mnie leń wychodzi - dziwię się, że komuś chce się pisać dłuższy kod, choć to w sumie kwestia gustu).
Dalej:
if (wybor > 3 || wybor < 1)
Jeśli to działa, to (szczerze i bez żadnej kpiny) podziwiam znajomość kolejności operatorów. Mnie się tego pamiętać nigdy nie chce. (W. Zientara pewnie by mnie zgromił za lenistwo, ale używam wielu języków i nie chce mi się takich niuansów zapamiętywać, gdy mogę po prostu wymusić odpowiednią kolejność stosując nawiasy.) ALE: co będzie, jak w przyszłości dopiszesz kolejne pytanie? Trzeba będzie zmodyfikować liczbę 3 w tym warunku. Lepiej byłoby zapisać tablica.length i wtedy nie trzeba będzie niczego zmieniać.
Kolejna sprawa: jak już sprawdzisz, że nie ma pytania o podanym numerze, wypisujesz stosowny komunikat... i program działa dalej, choć sensu to już nie ma. A zrobić z tego kodu jedną funkcję - i wtedy po wykryciu, że nie ma sensu działać dalej będzie można zakończyć jej wykonywanie prostym return.
Co ciekawe, to pytanie wypisujesz przed sprawdzeniem... Znowu: chyba powinno być na odwrót? Bo jeśli nr pytania nie będzie odpowiedni, zostanie wypisane undefined. (Choć może być ciekawie, gdy user poda np. liczbę ujemną, albo rzeczywistą. Albo wpisze "Tomek jest gupi". Ale to odrębna kwestia.)
To, czy zapiszesz odpowiedzi w kolejnej tablicy, czy w tej samej, nie ma większego znaczenia (dałoby się i tak, i tak). Gorzej, że nigdzie nie widzę wypisania możliwych odpowiedzi. Czyli user coś wybierze, a potem ma w ciemno zgadywać? Albo zaglądać w kod?
Następnie w pętli for robisz klasyczny błąd początkującego, popatrz uważnie:
for ( let i = 1; i = 3; i++ )
Warunek kontynuacji pętli to u Ciebie i = 3, czyli instrukcja przypisania, a nie warunek logiczny (i == 3, albo i === 3). W JS, jeśli dobrze pamiętam, wszystko, co nie jest zerem (albo NULL, albo undefined, albo pustym napisem? głowy nie dam, tego też nigdy mi się nie chce pamiętać), jest traktowane jako prawdziwe. Czyli "warunek" i = 3, jako wartość 3 będzie zawsze prawdziwy. Super, mamy pętlę nieskończoną. Użytkownik może zgadywać, aż zgadnie.
Swoją drogą, gdybyś gdzieś w pętli używał wartości zmiennej i, to byś się zdziwił - bo już od pierwszej iteracji zmienna ta miałaby wartość 3 (z powodu instrukcji przypisania, zamiast warunku logicznego). No ale zmiennej tej nigdzie nie używasz (poza kontrolą samej pętli), więc tego akurat problemu nie będzie.
Nie wiesz, jak odnieść odpowiedź do pytania? Przecież tablice zapisałeś w taki sposób, że poprawne odpowiedzi są pod tym samym indeksem, co pytanie. Jeśli użytkownik poda nr odpowiedzi (tak samo, jak wcześniej podał nr pytania) taki sam, jak nr pytania, to znaczy, że odpowiedział poprawnie. Koniec gry, można przerwać pętlę (i dobrze, bo nic innego jej nie przerwie ;-)).
Tylko gdzie jest prompt z prośbą o podanie numeru odpowiedzi?
Odnośnie formatu zapisu pytań i odpowiedzi, to jeśli nie chcesz stosować tablic bezpośrednio (każdy ma prawo tego nie chcieć, nie wnikam w szczegóły), można użyć zwykłego obiektu:
const quiz = {
pytania: [...],
odp: [...]
};
Można się potem do tych tablic odwoływać poprzez quiz.pytania i quiz.odp.
Rady na przyszłość?
Jeśli chcesz kontynuować temat JS, to zainteresuj się też podstawami HTMLa i rób takie aplikacje w formie prostych stron. Skoro już bawisz się tablicami w JS, opanowanie prostych operacji na DOMie (choćby wstawienia tekstu) nie powinno być trudne. Proste aplikacje można zawsze zamieścić online choćby w JSFiddle (albo czymś podobnym) i potem na forum podać link.