Sumowanie wszystkich pobranych/istniejących wartości

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.