Nazwa zmiennej ze zmienną

0

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;
2

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).

0

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);
}
2

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/

2

Na sam początek: dlaczego masz tam setInterval(..., 0);? Dlaczego robisz coś w tle cały czas? Wygląda to niezbyt ciekawie.

0

@cerrato: Pomysł z tablicą asocjacyjną jest ciekawy. Ale tu operuję na liczbach.

2

Ale to operowanie na liczbach niczego nie zmienia - zobacz: https://jsfiddle.net/c9zwruqj/

0

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.

0

@Patryk27: to jaką metodą to zrobić?

1

Wykorzystaj Map.

0

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ę.

1

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

0

Heh faktycznie. Zauważyłem, że to skleja te wartości, a jak zrobić, aby indexowało?

0

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++;
					
			};
}
1
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.

0

@Patryk27: metoda cerrato wydaje mi się łatwiejsza, więc chyba ją wykorzystam.

1

I wpadłem na pomysł czegoś takiego:

let numerceny = 0;
						let ceny = [];
						ceny[numerceny] = cenastara;
						numerceny++;
						console.log(ceny);

Aby w tablicy mieć ceny

1

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.

0

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" ]

0

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

0

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++;
					
			};
			
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1