brunoww22 | 2021-02-17 10:25:14 UTC | #1
Na wstępie powiem, że szukałem wiele godzin rozwiązania w internecie i nie znalazłem.
Krótki opis skryptu.
Użytkownik wybiera produkt oraz ilość, skrypt liczy cenę za daną ilość produktu.
I teraz mam problem ze zsumowaniem wszystkich wyliczonych cen produktów, które wybrał klient.
Czyli np. klient kupuje:
Pomarańcze 2kg - 24zł
Chleb zbożowy 3szt - 9zł
Marchewki 1kg - 6zł
Cena to 39zł
Nie wiem jak dodać do siebie wszystkie istniejące wartości, o ile takie coś istnieje w JS.
Wystarczy mi jakaś wskazówka :+1: Z góry dzięki :slightlysmilingface:
[details=”Pastebin, jeśli ktoś woli”]
https://pastebin.com/mLNEMmjS
[/details]
[details=”Cały kod skryptu”]
var suma = 0;
var jeden_produkt = 0;
var ilosc_produktow = 0;
function wyslij()
{
var cena = cena;
var lista = document.getElementById("lista").value;
var liczba = document.getElementById("liczba").value;
if(lista == "Jabłka"){cena = 8;}
else if(lista == "Pomarańcze"){cena = 12;}
else if(lista == "Cytryny"){cena = 5;}
else if(lista == "Nektarynki"){cena = 15;}
else if(lista == "Ziemniaki"){cena = 4;}
else if(lista == "Marchewki"){cena = 6;}
else if(lista == "Pietruszki"){cena = 5.5;}
else if(lista == "Buraki"){cena = 3.5;}
else if(lista == "Chleb"){cena = 1.5;}
else if(lista == "Kajzerki"){cena = 0.8;}
else if(lista == "Bułki paryskie"){cena = 2.3;}
else if(lista == "Chleb zbożowy"){cena = 3;}
else if(lista == "Woda mineralna Żywiec Zdrój 1,5l"){cena = 2.5;}
else if(lista == "Coca Cola 0,5l"){cena = 4;}
else if(lista == "Sok Tarczyn Czarna Porzeczka 0,33l"){cena = 2.3;}
else if(lista == "Ocet 0,5l"){cena = 6.5;}
liczba = parseFloat(liczba);
var jednostka = "kg";
if (lista == "Chleb" || lista == "Kajzerki" || lista == "Bułki paryskie" || lista == "Chleb zbożowy" || lista == "Woda mineralna Żywiec Zdrój 1,5l" || lista == "Coca Cola 0,5l" || lista == "Sok Tarczyn Czarna Porzeczka 0,33l" || lista == "Ocet 0,5l")
{
jednostka = "szt";
liczba = parseInt(liczba);
}
if (liczba <= 0 || isNaN(liczba))
{
alert("Podaj prawidłową liczbę produktów!");
}
else
{
var koszt = liczba * cena;
koszt = Math.floor(koszt * 100) / 100;
koszyk.innerHTML += "<br>- " + lista + " " + "<i>" + liczba + jednostka + "</i> - " + koszt + "zł";
}
jeden_produkt = koszt;
}
function liczcene()
{
suma = jeden_produkt + (wszystkie istniejące koszty produktów) (mozna to jakoś tutaj rozwiązać?);
stopka.innerHTML = suma;
}
[/details]
psycho | 2020-09-11 15:12:21 UTC | #2
Przydałaby się cała strona, by znać również wartości jakie są w HTMLu.
Lumpiasty | 2020-09-12 09:29:26 UTC | #3
Postanowiłem zrozumieć ten kod i sprawiłem, że jest trochę bardziej czytelny ;)
Nie widzę sensu robić tego w oddzielnej funkcji jeśli nigdzie nie przechowujesz koszyka w “przetwarzalnej” formie.
let suma = 0;
// Tablica z produktami
let produkty = [
{ nazwa: "Jabłka", cena: 8, jednostka: "kg" },
{ nazwa: "Pomarańcze", cena: 12, jednostka: "kg" },
{ nazwa: "Cytryny", cena: 5, jednostka: "kg" },
{ nazwa: "Nektarynki", cena: 15, jednostka: "kg" },
{ nazwa: "Ziemniaki", cena: 4, jednostka: "kg" },
{ nazwa: "Marchewki", cena: 6, jednostka: "kg" },
{ nazwa: "Pietruszki", cena: 5.5, jednostka: "kg" },
{ nazwa: "Buraki", cena: 3.5, jednostka: "kg" },
{ nazwa: "Chleb", cena: 1.5, jednostka: "szt" },
{ nazwa: "Kajzerki", cena: 0.8, jednostka: "szt" },
{ nazwa: "Bułki paryskie", cena: 2.3, jednostka: "szt" },
{ nazwa: "Chleb zbożowy", cena: 3, jednostka: "szt" },
{ nazwa: "Woda mineralna Żywiec Zdrój 1,5l", cena: 2.5, jednostka: "szt" },
{ nazwa: "Coca Cola 0,5l", cena: 4, jednostka: "szt" },
{ nazwa: "Sok Tarczyn Czarna Porzeczka 0,33l", cena: 2.3, jednostka: "szt" },
{ nazwa: "Ocet 0,5l", cena: 6.5, jednostka: "szt" }
];
function wyslij()
{
let koszt;
let lista = document.getElementById("lista").value;
let liczba = document.getElementById("liczba").value;
liczba = parseFloat(liczba);
if (liczba <= 0 || isNaN(liczba)) {
alert("Podaj prawidłową liczbę produktów!");
// Nic nie rób
break;
}
// Dla każdego produktu
for( produkt of produkty ) {
// Jeśli nie ten, nic nie rób i idź dalej
if( lista !== produkt.nazwa )
continue;
// Jeśli jednostka to szt to zaokrągl
if( produkt.jednostka === "szt" )
liczba = parseInt(liczba);
// Olicz koszt
koszt = produkt.cena * liczba;
koszt = Math.floor(koszt * 100) / 100;
// Oblicz sumę
suma += koszt;
// idk
koszyk.innerHTML += "<br>- " + lista + " " + "<i>" + liczba + produkt.jednostka + "</i> - " + koszt + "zł";
// Koniec pętli
break;
}
stopka.innerHTML = suma;
}
Oprócz tego:
var
- relikt przeszłości
if (lista == "Chleb" || lista == "Kajzerki" || lista == "Bułki paryskie" || lista == "Chleb zbożowy" || lista == "Woda mineralna Żywiec Zdrój 1,5l" || lista == "Coca Cola 0,5l" || lista == "Sok Tarczyn Czarna Porzeczka 0,33l" || lista == "Ocet 0,5l");
-
Nie rób tak. Długie linijki są nieczytelne.
Dla zachowania względnej czytelności polecam oddzielać dane od kodu.
Jak skończyłem grzebać, spojrzałem na to od czego zacząłem i uznałem, że niepotrzebnie się głowiłem, bo
suma = jeden_produkt + (wszystkie istniejące koszty produktów) (mozna to jakoś tutaj rozwiązać?);
Wystarczy zastąpić
suma = jeden_produkt + suma;
;)
brunoww22 | 2020-09-12 09:31:12 UTC | #4
Dziękuję, już wczoraj sam rozwiązałem to, problem polegał na tym, że sumowanie powinno być w pierwszej funkcji czyli suma += jeden_produkt;
, a wyświetlanie sumy już normalnie w drugiej funkcji sobie zrobiłem.
system | 2020-10-14 09:31:13 UTC | #5
Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.