Witam,
mam taki kawałek kodu i nie wiem jak zrobić, aby nazwa zmiennej to była cenanowa i numer np.: cenanowa5.
let cenanowa+numer = iloscInt * cenastaraFloat;
Witam,
mam taki kawałek kodu i nie wiem jak zrobić, aby nazwa zmiennej to była cenanowa i numer np.: cenanowa5.
let cenanowa+numer = iloscInt * cenastaraFloat;
Poczytaj o problemie X/Y - już kilka razy go wykazałeś :-) Np. tu:
Podobnie dzieje się tutaj: nie potrzebujesz wcale tworzyć żadnych zmiennych o dynamicznych nazwach - wystarczy Ci jedna zmienna będąca tablicą i pętle.
Na przyszłość pamiętaj, aby opisywać zarówno problem (mam tablicę z produktami oraz ich cenami i nie jestem pewien, w jaki sposób te ceny je zsumować
), jak i Twoje podejście do jego rozwiązania (próbowałem tworzyć zmienną o dynamicznej nazwie, lecz niestety taka składnia nie istnieje
).
No to mam taki kod i chcę, aby sprawdzał czy wynik (cenarazemokragla) jest równa razemspr, jeśli nie to blokuje kod i odświeża stronę. Jest dużo kodu no ale pokażę może się przyda.
let numer = 0;
function ilosc()
{
document.getElementById('dalej').style.display="block";
let rekordy = [...document.querySelectorAll('.wiersz')].length;
setInterval(function ()
{
while(numer < rekordy)
{
let cenastara = document.getElementById('cenatab'+numer).innerHTML;
let inputilosc = document.getElementById('ilosc'+numer);
let ilosc = document.getElementById('ilosc'+numer).value;
let iloscInt = parseInt(ilosc);
let cenastaraFloat = parseFloat(cenastara);
let cenanowa = iloscInt * cenastaraFloat;
let cenanowa+numer = iloscInt * cenastaraFloat;
cenanowa = Math.round(cenanowa * 100) / 100;
document.getElementById('cenatab'+numer).innerHTML = cenanowa;
let numerek = 0;
let cenarazem = 0;
while(numerek < rekordy)
{
let razem = document.getElementById('cenatab'+numerek).innerHTML;
let razemInt = parseFloat(razem)
cenarazem = cenarazem + razemInt;
let cenarazemokragla = Math.round(cenarazem * 100) / 100;
document.getElementById('razem').style.display='block';
document.getElementById('razem').innerHTML = cenarazemokragla;
numerek++;
}
while(numer < rekordy)
{
let razemspr = razemspr + cenanowa+numer;
}
if(document.getElementById('razem').innerHTML != razemspr)
{
alert("Wystąpił błąd podczas sprawdzania poprawności formularza. Spróbuj ponownie.");
header("location: podsumowanie.php");
}
numer++;
};
}, 0000);
}
Czy może chodziło Ci o coś takiego - https://jsfiddle.net/cxzj8esr/
Ważna uwaga - obiekt window
działa na zmiennych globalnych.
Nie wiem, czy lepszą opcją by nie było skorzystanie z tablic asocjacyjnych - coś na kształt https://jsfiddle.net/ejmxf1cv/
Na sam początek: dlaczego masz tam setInterval(..., 0);
? Dlaczego robisz coś w tle cały czas? Wygląda to niezbyt ciekawie.
@cerrato: Pomysł z tablicą asocjacyjną jest ciekawy. Ale tu operuję na liczbach.
Ale to operowanie na liczbach niczego nie zmienia - zobacz: https://jsfiddle.net/c9zwruqj/
Faktycznie. Ogólnie przepraszam, że zadaję łatwe, może głupie pytania, ale jestem tu, aby znaleźć na nie odpowiedź, więc proszę o wyrozumiałość. Piszę tak na wszelki wypadek.
@Patryk27: to jaką metodą to zrobić?
Wykorzystaj Map.
No ok, poczytałem trochę o map(), ale teraz nie wiem jak zrobić, aby po każdym okrążeniu pętli do następnego indexu dodawała się wartość z cenastara.
let ceny = [cenastara];
while(numer < rekordy)
{
ceny = ceny + cenastara;
}
console.log(ceny);
Ten u góry kod zacina stronę i całą przeglądarkę.
A jak myślisz - czemu blokuje przeglądarkę?
Masz podany warunek, który warunkuje opuszczenie pętli. Ale żadna z dwóch zmiennych podanych w warunku nie zmienia się w trakcie działania pętli, więc warunek nigdy się nie zmieni, w związku z czym pętla się albo nigdy nie wykona, albo będzie mielić w nieskończoność :P
Heh faktycznie. Zauważyłem, że to skleja te wartości, a jak zrobić, aby indexowało?
No chcę, aby co każde okrążenie pętli do tablicy ceny dopisywała się wartość cenastara, ale właśnie zauważyłem, że ta pętla nie jest potrzebna, bo mam tę pierwszą dużą) i chcę, aby co każde jej okrążenie do tablicy ceny dopisywał się nowy index z wartością cenastara.
Jeszcze raz kod: (uaktualniony):
let numer = 0;
function ilosc()
{
document.getElementById('dalej').style.display="block";
let rekordy = [...document.querySelectorAll('.wiersz')].length;
while(numer < rekordy)
{
let cenastara = document.getElementById('cenatab'+numer).innerHTML;
let inputilosc = document.getElementById('ilosc'+numer);
let ilosc = document.getElementById('ilosc'+numer).value;
let iloscInt = parseInt(ilosc);
let cenastaraFloat = parseFloat(cenastara);
let cenanowa = iloscInt * cenastaraFloat;
let ceny = [cenastara];
let numerceny = 0;
ceny = ceny + cenastara;
console.log(ceny);
cenanowa = Math.round(cenanowa * 100) / 100;
document.getElementById('cenatab'+numer).innerHTML = cenanowa;
let numerek = 0;
let cenarazem = 0;
while(numerek < rekordy)
{
let razem = document.getElementById('cenatab'+numerek).innerHTML;
let razemInt = parseFloat(razem)
cenarazem = cenarazem + razemInt;
let cenarazemokragla = Math.round(cenarazem * 100) / 100;
document.getElementById('razem').style.display='block';
document.getElementById('razem').innerHTML = cenarazemokragla;
numerek++;
}
if(document.getElementById('razem').innerHTML != razemspr)
{
alert("Wystąpił błąd podczas sprawdzania poprawności formularza. Spróbuj ponownie.");
header("location: podsumowanie.php");
}
numer++;
};
}
Gouda105 napisał(a):
Witam,
mam taki kawałek kodu i nie wiem jak zrobić, aby nazwa zmiennej to była cenanowa i numer np.: cenanowa5.let cenanowa+numer = iloscInt * cenastaraFloat;
Użyj tablicy:
cenanowa[x]
zmienne["cenanowa"+x]
czy jak tam chcesz.
@Patryk27: metoda cerrato wydaje mi się łatwiejsza, więc chyba ją wykorzystam.
I wpadłem na pomysł czegoś takiego:
let numerceny = 0;
let ceny = [];
ceny[numerceny] = cenastara;
numerceny++;
console.log(ceny);
Aby w tablicy mieć ceny
Pomysł jest z grubsza OK.
Ale - jeśli chcesz to zrobić porządnie, to może weź to opakuj w jakiś obiekt, który będzie kontrolować operacje zapisu/odczytu. Obecnie możesz sobie strzelić w stopę - chociażby próbować odczytać coś, czego nie ma, albo przypadkowo nadpisać jakąś wartość. Z kolei pisanie w każdym miejscu kodu sprawdzającego i kontrolującego zapis/odczyt jest bez sensu. Lepiej zrobić jakiś obiekt i umieścić w nim gettery/settery, a następnie obsługiwać go za pomocą tych metod. Tak na szybko możesz rzucić okiem tutaj - https://forum.pasja-informatyki.pl/263736/javascript-gettery-i-settery-po-co , może zrozumiesz o co mi chodzi.
Wiem, że to nieprofesjonalne, ale czy da się zrobić, aby dodawać następny index z wartością cenastara do tablicy?
let ceny= [];
ceny[numer] = cenastara
console.log(ceny);
numer++;
Bo pokazuje:
Array [ "99.99" ]
Array [ <1 empty slot>, "120.99" ]
Nie wiem, czy dobrze zrozumiałem Twoje pytanie, ale podejrzewam że chodzi Ci o tablicę dwuwymiarową. Jeśli tak, to rzuć okiem na https://rafalskowron.pl/2018/js-stworzyc-tablice-dwuwymiarowa-javascript/ LUB https://kursjs.pl/kurs/super-podstawy/tablice.php
Ewentualnie coś z naszego portalu - Deklarowanie tablic wielowymiarowych
Nie, chodzi o to, aby dodawało indexy tablicy i wstawiało do nich wartosc cenastara(aktualizuje się co każde okrążenie pętli).
Cały kod:
let numer = 0;
function ilosc()
{
document.getElementById('dalej').style.display="block";
let rekordy = [...document.querySelectorAll('.wiersz')].length;
while(numer < rekordy)
{
//Pobieranie wartości podstawowej cen
let cenastara = document.getElementById('cenatab'+numer).innerHTML;
let ilosc = document.getElementById('ilosc'+numer).value;
//Formatowanie na liczby i łączenie w wynik
let iloscInt = parseInt(ilosc);
let cenastaraFloat = parseFloat(cenastara);
let cenanowa = iloscInt * cenastaraFloat;
//Zaokrąglanie ceny i przypisanie jej do odpowiedniego diva
cenanowa = Math.round(cenanowa * 100) / 100;
document.getElementById('cenatab'+numer).innerHTML = cenanowa;
//Sumowanie cen i włożenie ich do diva razem
let numerek = 0;
let cenarazem = 0;
while(numerek < rekordy)
{
let razem = document.getElementById('cenatab'+numerek).innerHTML;
let razemInt = parseFloat(razem)
cenarazem = cenarazem + razemInt;
let cenarazemokragla = Math.round(cenarazem * 100) / 100;
document.getElementById('razem').style.display='block';
document.getElementById('razem').innerHTML = cenarazemokragla;
numerek++;
}
//Tworzenie tablicy z podstawowymi cenami
let ceny= [];
ceny[numer] = cenastara;
//
console.log(ceny);
numer++;
};
}