Sumowanie wszystkich pobranych/istniejących wartości

Pytania i problemy
javascript
brunoww22
brunoww22 Pionier

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 👍 Z góry dzięki 🙂

[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 += "- " + lista + " " + "" + liczba + jednostka + " - " + 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
psycho

Przydałaby się cała strona, by znać również wartości jakie są w HTMLu.

Lumpiasty
Lumpiasty Stały bywalec

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 += "- " + lista + " " + "" + liczba + produkt.jednostka + " - " + 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
brunoww22 Pionier

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
system

Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.