Hej!
Piszę pewną aplikację i aktualnie, po szybkim pisaniu kodu przychodzi moment przeglądania co się napisało.
Mam już trochę mętlik w głowie po tygodniu kodowania po 14 godzin :) dlatego mam problem ze zmniejszeniem ilości kodu w prostym switch case :P proszę Was o pomoc, w jaki sposób mogę to przerobić, aby kod był... bardziej... fancy, beautifull :)
Otóż, mam sobie plik dane.json, struktura taka:
{
"customSlideParams": [{
"texture": "NameSlides_1",
"slideNumber": 1,
"isUserInput": true,
"questionType": "text",
"question": "Jak masz na imię?"
},
{
"texture": "NameSlides_2",
"slideNumber": 2,
"isUserInput": true,
"questionType": "radio",
"question": "Zaliczyliśmy małe spóźnienie, co?",
"answers": [
"R,X", "Odpowiedz 1",
"B", "Odpowiedz 2",
"A", "Odpowiedz 3",
"S", "Odpowiedz 4",
"P", "Odpowiedz 5",
"K", "Odpowiedz 6"
]
},
{
"texture": "NameSlides_3",
"slideNumber": 3,
"isUserInput": true,
"questionType": "radio",
"question": "Hej, nie bądź taki szybki!",
"answers": [
"K", "Odpowiedz 1",
"S", "Odpowiedz 2",
"A", "Odpowiedz 3",
"B,X", "Odpowiedz 4",
"P", "Odpowiedz 5",
"R", "Odpowiedz 6"
]
}]
}
W kodzie mam 7 zmiennych (this,R, this.B itd...) reprezentujących licznik danych odpowiedzi na. np. jak użytkownik odpowiedział na odpowiedź 4 to dodaję plus jeden this.A++.
Kolejność kategorii jest powiedzmy losowa! Nie mam wpływu na to, które pytanie gdzie będzie, więc kod musi być elastyczny.
Kolekcjonuje dane w obiekcie this.dataCollections = {R: this.R, B: this.B... itd}.
Zwiększanie licznika realizuję poprzez ten blok kodu:
var ansArr = slide.customParams.answers;
for (var i = 0; i < ansArr.length; i++) {
var actualQuestion = 'question-' + ((i+1)/2);
var actialQuestionString = actualQuestion.toString();
var isActualChecked = document.getElementById(actialQuestionString);
if (i%2 !== 0 && isActualChecked.checked) {
switch (ansArr[i-1].charAt(0)) {
case 'R':
self.R++;
break;
case 'B':
self.B++;
break;
case 'A':
self.A++;
break;
case 'S':
self.S++;
break;
case 'P':
self.P++;
break;
case 'K':
self.K++;
break;
}
switch (ansArr[i-1].charAt(2)) {
case 'X':
self.X++;
break;
}
}
}
Dodam, że odpowiedzi są typu radio, więc jednokrotnego wyboru. Ale mam też rodzaj odpowiedzi wielokrotnego wyboru, więc switch case tego na pewno nie zrobię (chyba), tylko na zasadzie
if (warunek){};
if(warunek){};
...
Co wydaje się już mega niefajne, bo dużo kodu :(
Ogólnie mam pytanie, czy jest (pewnie tak) sposób na efektywniejsze, lub po prostu ładniejsze zapisanie tego?
Co sądzicie, jak oceniacie ten sposób i czy macie jakieś sugestie, podpowiedzi! Z góry dzięki za rzetelne wypowiedzi! :)