Cześć, jestem początkującym programistą js i mam problem z zadaniem stworzenia kalkulatora budowlanego. Wytyczne wyglądają w ten sposób:
- podaj powierzchnie użytkową z garażem
- podaj bryłę budynku (parterowy, z poddaszem, piętrowy)
a) stan surowy(1350zł; 1010zł; 980zł)
b) stan deweloperski (1275zł, 960zł,1020zł)
c) stan pod klucz (720zł, 720zł, 720zł) - podpiwniczenie (TAK, NIE)
a) stan surowy( 25; 0)
b) stan deweloperski ( 10 , 0)
c) stan pod klucz (10 , 0) - dach (płaski, spadzisty)
a) stan surowy( 0,100 )
b) stan deweloperski (0,15)
c) stan pod klucz (0;0)
Stan surowy, stan deweloperski, stan pod klucz
I Stan surowy od 1*(2a+3a+4a)
II Stan deweloperski od 1*(2b+3b+4b)
III Stan pod klucz od 1*(2c+3c+4c)
Łącznie od I+II+III = ?
I teraz tak - wybierając np stan surowy z poddaszem trzeba zsumować dwie pierwsze wartości. Wszystko byłoby proste, bo wtedy wyliczam to sobie, sumuje itd ale jest przypadek kiedy wszystkie wartości będą surowe, a jedna deweloperska - np podpiwniczenie i wtedy konieczne będzie podstawienie do wzoru liczby zawartej w piwnicy 3b, ale też pobrać wartość 2b.
Innym wypadkiem jest wybranie wszystkich opcji 'pod klucz' - w tym wypadku nie mogę zsumować tylko tego('pod klucz'), ale muszę też dodać wszystkie 'poprzednie' wartości, czyli 'surowe' i developerskie - bo to są kolejne etapy dotarcia do stanu pod klucz.
Tyle tytułem wstępu.
Kod wygląda tak, że mam formularz z inputami typu radio i wartościami value.
Przykładowy kawałek kodu html:
<div class="options">
<ul class="input__blocks stan">
<li class="block">
<input value="parter" type="radio" name="rodzaj" class="ico ico-1">
<label for="parterowy">Parterowy</label>
</li>
<li class="block">
<input value="poddasze" type="radio" name="rodzaj" class="ico ico-4">
<label for="poddasze">Z poddaszem</label>
</li>
<li class="block">
<input value="pietro" type="radio" name="rodzaj" class="ico ico-5">
<label for="klucz">Piętrowy</label>
</li>
</ul>
</div>
a tak wygląda js:
function calculateTotal(){
var rozmiar = document.querySelector('input[name="rozmiar"]').value;
var stan = document.querySelector('input[name="stan"]:checked').value;
var rodzaj = document.querySelector('input[name="rodzaj"]:checked').value;
var dach = document.querySelector('input[name="dach"]:checked').value;
var piwnica = document.querySelector('input[name="piwnica"]:checked').value;
var base_surowy = 0;
var base_developer = 0;
var base_klucz = 0;
var piwnica_surowy = 0;
var piwnica_developer = 0;
var piwnica_klucz = 0;
var dach_surowy = 0;
var dach_developer = 0;
var dach_klucz = 0;
if (dach == 'spadzisty') {
if (stan == 'surowy') {dach_surowy = 100;};
if (stan == 'developerski') {
dach_surowy = 100;
dach_developer = 15;
};
if (stan == 'klucz') {
dach_surowy = 100;
dach_developer = 15;
dach_klucz = 0;
};
};
if (piwnica == true) {
if (stan == 'surowy') {piwnica_surowy = 25;};
if (stan == 'developerski') {
piwnica_surowy = 25;
piwnica_developer = 10;
};
if (stan == 'klucz') {
piwnica_surowy = 25;
piwnica_developer = 10;
piwnica_klucz = 10;
};
};
document.getElementById("price").innerHTML = calc + 'zł';
}
Stanąłem na tym etapie, bo zacząłem wpadać w pętle 'miliona' if-ów.
Czy jest jakiś inny, bardziej wydajny sposób niż setka if-ów, który mogę zastosować na poziomie początkującego?
Maciej Cąderek