Permalänk
Medlem

JavaScript - nybörjarproblem

Jag är fruktansvärt grön på JavaScript.
Min beräkning här nedan ska alltså skriva ut busted eller safe beroende på om total är över 21 (vilket den är här).

Min fundering är hur jag ska skriva ut det. Nu använder jag "alert" mest för att det är den enda jag känner till, men jag vill inte ha den som en popup.

Vad kan jag ha istället? Vad finns det för alternativ?

var card1 = 4 var card2 = 9 var card3 = 8 var card4 = 1 var card5 = 6 var total = card1+card2+card3+card4+card5; var result; if (total > 21) {alert("busted"); } else {alert("safe");}

Lite offt, men är alert en function?

Tacksam för all hjälp!

Permalänk
Medlem

console.log('text') brukar användas för att felsöka grejjer. Det skrivs då ut i din konsoll istället för att du ska bli störd av en popup-ruta.

Tips
Istället för att använda en massa variablar kan du använda en vektor (array). Då kommer det bli mycket lättare att underhålla koden.

var cards = [4, 9, 8, 1, 6]; var total = cards.reduce(function(a, b) { return a + b; }); if (total > 21) { console.log('busted'); } else { console.log('safe'); }

I min kod används array.reduce för att räkna ihop de värden du har i din vektor.

Permalänk
Hedersmedlem

Det finns många möjligheter.

Om du inte vill göra dig beroende av tredjepartsbibliotek kan du tex skapa en div för en statustext där du ändrar texten.
https://developer.mozilla.org/en-US/docs/Web/API/Node.textCon...

Om du däremot kan tänka dig att inkludera tredjepartskod som jQuery/jQueryUI, AngularJS etc. så finns det massor med andra möjligheter att skapa intressanta lösningar.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem
Skrivet av Marwelln:

console.log('text') brukar användas för att felsöka grejjer. Det skrivs då ut i din konsoll istället för att du ska bli störd av en popup-ruta.

Tips
Istället för att använda en massa variablar kan du använda en vektor (array). Då kommer det bli mycket lättare att underhålla koden.

var cards = [4, 9, 8, 1, 6]; var total = cards.reduce(function(a, b) { return a + b; }); if (total > 21) { console.log('busted'); } else { console.log('safe'); }

I min kod används array.reduce för att räkna ihop de värden du har i din vektor.

Det här verkar vara något ja borde titta mer på! Halverar ju koden, men jag har inte kommit så långt att jag börjat titta på arrays ännu.
Går det göra med bara variabler annars?

Skrivet av giplet:

Det finns många möjligheter.

Om du inte vill göra dig beroende av tredjepartsbibliotek kan du tex skapa en div för en statustext där du ändrar texten.
https://developer.mozilla.org/en-US/docs/Web/API/Node.textCon...

Om du däremot kan tänka dig att inkludera tredjepartskod som jQuery/jQueryUI, AngularJS etc. så finns det massor med andra möjligheter att skapa intressanta lösningar.

Jag känner mig fortfarande väldigt grön och tror jag vill vänta med tredjepart tills jag förstår grunderna bättre.

Jag har en variabel som heter "ANSWER" som är kopplad till en html sida där det ligger en div tag med id answer.
Hit vill jag att min beräkning ska visa "Busted" eller "safe" beroende på totalen.

Vad jag kan se nu visar min total värdet istället, alltså 28.

edit: felstavningar

Permalänk
Medlem
Skrivet av Mepi:

Det här verkar vara något ja borde titta mer på! Halverar ju koden, men jag har inte kommit så långt att jag börjat titta på arrays ännu.
Går det göra med bara variabler annars?

En array är en variabel. En variabel är bara som en låda, men lådan kan vara av olika typ, så att olika saker passar i den.

var hej = 1; // Detta kommer skapa en variabel av typen "Int" eller "Integer" - Alltså en siffra. Siffror kan man plussa ihop som vanligt.

var hej = "1"; // Detta kommer skapa en variabel av typen "string" - Alltså text. Det blir det då jag satt siffran mellan "dubbel-fnuttar". Allt mellan dubbelfnuttarna ska behandlas som det är text.

Följande kod ger då olika resultat:
var ett = 1;
var två = 2;

ett + två = 3

---------------------

var ett = "1";
var två = "2";

ett + två = "12"

En array är en till sorts typ - Det är en lista, med olika variabler som kan vara av olika typer. Så här kan man "rita" en array

var enArray = [];
enArray[0] = "Hej"; // Första raden i listan (position 0) ska vara en sträng (dubbelfnuttar!)
enArray[1] = "gris";
enArray[2] = "Olle";

Gör man då enArray.reduce() på enArray, så kommer man ju då få ut "HejgrisOlle" eftersom allt är strängar (typ iallafall)

Hade alla rader i arrayen (en array (matris på svenska) är en rad med rader) varit nummer hade de hanterats som siffror och plusats ihop precis som i matteboken.

Skrivet av Mepi:

Jag känner mig fortfarande väldigt grön och tror jag vill vänta med tredjepart tills jag förstår grunderna bättre.

Jag har en variabel som heter "ANSWER" som är kopplad till en html sida där det ligger en div tag med id answer.
Hit vill jag att min beräkning ska visa "Busted" eller "safe" beroende på totalen.

Vad jag kan se nu visar min total värdet istället, alltså 28.

edit: felstavningar

var summan = functionenSomRäknarFramSumman();

var divWithAnswer = document.getElementById("answer");

divWithAnswer.innerHTML = summan;

Permalänk
Medlem
Skrivet av Ernesto:

En array är en variabel. En variabel är bara som en låda, men lådan kan vara av olika typ, så att olika saker passar i den.

var hej = 1; // Detta kommer skapa en variabel av typen "Int" eller "Integer" - Alltså en siffra. Siffror kan man plussa ihop som vanligt.

var hej = "1"; // Detta kommer skapa en variabel av typen "string" - Alltså text. Det blir det då jag satt siffran mellan "dubbel-fnuttar". Allt mellan dubbelfnuttarna ska behandlas som det är text.

Följande kod ger då olika resultat:
var ett = 1;
var två = 2;

ett + två = 3

---------------------

var ett = "1";
var två = "2";

ett + två = "12"

En array är en till sorts typ - Det är en lista, med olika variabler som kan vara av olika typer. Så här kan man "rita" en array

var enArray = [];
enArray[0] = "Hej"; // Första raden i listan (position 0) ska vara en sträng (dubbelfnuttar!)
enArray[1] = "gris";
enArray[2] = "Olle";

Gör man då enArray.reduce() på enArray, så kommer man ju då få ut "HejgrisOlle" eftersom allt är strängar (typ iallafall)

Hade alla rader i arrayen (en array (matris på svenska) är en rad med rader) varit nummer hade de hanterats som siffror och plusats ihop precis som i matteboken.

var summan = functionenSomRäknarFramSumman();

var divWithAnswer = document.getElementById("answer");

divWithAnswer.innerHTML = summan;

Din förklaring kring arrays var den bästa jag fått någonsin! Bättre än alla böckerna tillsammans!

Jag är ändå lite inne på att jag ska använda en variabel. På något sätt ska jag få in mitt svar efter "ANSWER".
Om jag kör så här så får jag svaret undefined. Men om jag lägger "var calc = if (total....." istället för ; så får jag syntaxerror.

var card1 = 4 var card2 = 9 var card3 = 8 var card4 = 1 var card5 = 6 var total = card1+card2+card3+card4+card5; var calc; if (total > 21) { console.log('busted'); } else { console.log('safe'); }; ANSWER = calc;

Permalänk
Hedersmedlem
Skrivet av Mepi:

Din förklaring kring arrays var den bästa jag fått någonsin! Bättre än alla böckerna tillsammans!

Jag är ändå lite inne på att jag ska använda en variabel. På något sätt ska jag få in mitt svar efter "ANSWER".
Om jag kör så här så får jag svaret undefined. Men om jag lägger "var calc = if (total....." istället för ; så får jag syntaxerror.

var card1 = 4 var card2 = 9 var card3 = 8 var card4 = 1 var card5 = 6 var total = card1+card2+card3+card4+card5; var calc; if (total > 21) { console.log('busted'); } else { console.log('safe'); }; ANSWER = calc;

Vad är det du försöker göra med calc och answer? Ta bort "var calc; " och den sista raden så ska det funka så långt. Sedan kan du sätta dig och fundera på vad du vill åstadkomma i nästa steg.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem
Skrivet av giplet:

Vad är det du försöker göra med calc och answer? Ta bort "var calc; " och den sista raden så ska det funka så långt. Sedan kan du sätta dig och fundera på vad du vill åstadkomma i nästa steg.

ANSWER är kopplat till en HTML sida där mitt "busted" ska presenteras. Med calc hade jag hoppats kunna få ekvationen som en variabel och sedan kunna lägga den på answer.

Den här raden missade jag ta med i förra posten. Den ligger direkt efter ANSWER=calc

mepi.assert("7.2", ANSWER, true);

I HTML ser det sen ut så här:

<div id="answer7.2" class="answer"></div>

Här vill jag visa mitt "busted" eller "safe" beroende på värdet av berkäningen.

Permalänk
Medlem

Använd getElementById() och textContent() för att skriva ut något till ett element.

document.getElementById('answer7.2').textContent('text');

var answer; if (total > 21) { answer = 'busted'; } else { answer = 'safe'; } document.getElementById('answer7.2').textContent(answer);

Denna kod går att korta ner enormt genom att använda ternary.

var answer = total > 21 ? 'busted' : 'safe'; document.getElementById('answer7.2').textContent(answer);

Permalänk
Medlem
Skrivet av Marwelln:

Använd getElementById() och textContent() för att skriva ut något till ett element.

document.getElementById('answer7.2').textContent('text');

var answer; if (total > 21) { answer = 'busted'; } else { answer = 'safe'; } document.getElementById('answer7.2').textContent(answer);

Denna kod går att korta ner enormt genom att använda ternary.

var answer = total > 21 ? 'busted' : 'safe'; document.getElementById('answer7.2').textContent(answer);

Tack så otroligt mycket! Detta löste mina problem!

Nu fattar jag precis vad jag gjort för fel. Men jag behövde inte all kod.
Jag var bara trög nog att inte förstå att jag var tvungen att lägga:

if (total > 21) { answer = 'busted'; } else { answer = 'safe'; }

Nu fungerar det precis så som jag vill! <3

Permalänk
Medlem

Passar väl även på att slänga ut en fråga om for loopar i samma tråd för att undvika spamma trådar!

Jag försöker förstå detta, men jag får det inte att gå ihop.

for (variable=startvalue; variable<=endvalue; variable=variable+incrementfactor) { // Here goes the script lines you want to loop. }

Säg att jag har ett värde 500. Detta vill jag öka med 9 6gånger.

Startvalue förmodar jag är 500.
Ska Endvalue vara mitt beräknade svar?
"variable=variable+incrementfactor" det här förvirrar mig. Vilken variable ska vara vart?

Permalänk
Skrivet av Mepi:

Passar väl även på att slänga ut en fråga om for loopar i samma tråd för att undvika spamma trådar!

Jag försöker förstå detta, men jag får det inte att gå ihop.

for (variable=startvalue; variable<=endvalue; variable=variable+incrementfactor) { // Here goes the script lines you want to loop. }

Säg att jag har ett värde 500. Detta vill jag öka med 9 6gånger.

Startvalue förmodar jag är 500.
Ska Endvalue vara mitt beräknade svar?
"variable=variable+incrementfactor" det här förvirrar mig. Vilken variable ska vara vart?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refer...

Förstår inte riktigt hur du skulle ha användning för for-loopen du beskriver, men den skulle se ut såhär:

for (variable=500; variable<=545; variable=variable+9) { // Here goes the script lines you want to loop. }

Permalänk
Medlem
Skrivet av Yxskaftet:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refer...

Förstår inte riktigt hur du skulle ha användning för for-loopen du beskriver, men den skulle se ut såhär:

for (variable=500; variable<=545; variable=variable+9) { // Here goes the script lines you want to loop. }

Användningen för loopen är bara för att jag vill lära mig.
Vart kommer värdet 545 ifrån? Skulle det stå 554 där (6*9=54)?

Om jag istället ville att loopen skulle minska istället för att öka, ändrar jag bara "+9" till "-9"?

Permalänk
Skrivet av Mepi:

Användningen för loopen är bara för att jag vill lära mig.
Vart kommer värdet 545 ifrån? Skulle det stå 554 där (6*9=54)?

Om jag istället ville att loopen skulle minska istället för att öka, ändrar jag bara "+9" till "-9"?

Nej det skulle stå 545 där eftersom att första varvet i loopen kommer variable att vara 500.
Alltså, vill du att den ska köras 6ggr så är 545 max-värdet variable får ha.
Skriver du ut värdet på variable i consolen så ser du.
500
509
518
527
536
545

Permalänk
Medlem
Skrivet av Yxskaftet:

Nej det skulle stå 545 där eftersom att första varvet i loopen kommer variable att vara 500.
Alltså, vill du att den ska köras 6ggr så är 545 max-värdet variable får ha.
Skriver du ut värdet på variable i consolen så ser du.
500
509
518
527
536
545

Jaha! Då förstår jag!

Men om man istället för en For loop använder while.
Säg att jag har värdet 20 och vill öka det med 5 tills den når 400.
Alltså jag vill veta hur många gånger den loopar.

Tänker jag rätt om jag gör så här?

var a = 20; var b = 5; while (a<400) { a+b; a++;

Permalänk
Hedersmedlem
Skrivet av Mepi:

Jaha! Då förstår jag!

Men om man istället för en For loop använder while.
Säg att jag har värdet 20 och vill öka det med 5 tills den når 400.
Alltså jag vill veta hur många gånger den loopar.

Tänker jag rätt om jag gör så här?

var a = 20; var b = 5; while (a<400) { a+b; a++;

Nej, du tänker inte rätt. Vilken variabel innehåller antalet loopar om du nu vill veta det? Vad gör raden "a+b;"?

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem
Skrivet av Mepi:

Jaha! Då förstår jag!

Men om man istället för en For loop använder while.
Säg att jag har värdet 20 och vill öka det med 5 tills den når 400.
Alltså jag vill veta hur många gånger den loopar.

Tänker jag rätt om jag gör så här?

var a = 20; var b = 5; while (a<400) { a+b; a++;

Vill du öka med fem måste du plussa på fem (b variabeln) i varje loop. a+b som du har gör ingenting och a++ plussar bara på 1.

while (a < 400) { a = a + b; console.log(a); }

Permalänk
Medlem
Skrivet av giplet:

Nej, du tänker inte rätt. Vilken variabel innehåller antalet loopar om du nu vill veta det? Vad gör raden "a+b;"?

Ledsen, skrev fel. Det skulle stå "a+=b" (Om det gör saken bättre vet jag inte)
Jag vet ju inte antalet loopar utan vill att min while loop ska räkna ut det åt mig.

Jag försöker väl först och främst förstå och testa mig fram med den informationen jag hittar här:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/while

Permalänk
Medlem
Skrivet av Mepi:

Jaha! Då förstår jag!

Men om man istället för en For loop använder while.
Säg att jag har värdet 20 och vill öka det med 5 tills den når 400.
Alltså jag vill veta hur många gånger den loopar.

Tänker jag rätt om jag gör så här?

var a = 20; var b = 5; while (a<400) { a+b; a++;

var startValue = 20; // Startvärdet var count = 0; // Räknaren while (startValue <= 400) { startValue += 5; // Öka med 5 count++; // Öka med 1, räkna antalet loops }

Din kod kommer öka med 1, om vi antar att den kör första gången då blir det;
a+b // 20 + 5 men du tilldelar aldrig något värde till någon variabel.
a++ // 20 + 1 här ökar a med 1

Ta en titt här istället; http://www.w3schools.com/js/default.asp

Visa signatur

Arch - Makepkg, not war -||- Gigabyte X570 Aorus Master -||- GSkill 64GiB DDR4 14-14-15-35-1T 3600Mhz -||- AMD 5900x-||- Gigabyte RX6900XT -||- 2x Adata XPG sx8200 Pro 1TB -||- EVGA G2 750W -||- Corsair 570x -||- O2+ODAC-||- Sennheiser HD-650 -|| Boycott EA,2K,Activision,Ubisoft,WB,EGS
Arch Linux, one hell of a distribution.

Permalänk
Hedersmedlem
Skrivet av Mepi:

Ledsen, skrev fel. Det skulle stå "a+=b" (Om det gör saken bättre vet jag inte)
Jag vet ju inte antalet loopar utan vill att min while loop ska räkna ut det åt mig.

Jag försöker väl först och främst förstå och testa mig fram med den informationen jag hittar här:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/while

Varför jag var lite elak och svarade dig med motfrågor är för att du inte borde göra dessa felen. Du verkar mest ha slängt ihop lite kod utan att tänka. Ska du lära dig så måste du sätta dig och fundera över vad som händer. Efter den tidigare diskussionen i tråden så borde det vara uppenbart att om du vill att koden ska hålla reda på något eller räkna ut något så bör man spara det i en variabel.

I detta fallet så kan man räkna ut antalet loopar ifrån de andra ingående värdena, men det är inte alltid man kan det utan måste ha en variabel som håller reda på det. Vanligtvis en variabel för varje sak man vill hålla reda på.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem
Skrivet av Commander:

var startValue = 20; // Startvärdet var count = 0; // Räknaren while (startValue <= 400) { startValue += 5; // Öka med 5 count++; // Öka med 1, räkna antalet loops }

Din kod kommer öka med 1, om vi antar att den kör första gången då blir det;
a+b // 20 + 5 men du tilldelar aldrig något värde till någon variabel.
a++ // 20 + 1 här ökar a med 1

Ta en titt här istället; http://www.w3schools.com/js/default.asp

Okej, här förstår jag bättre nu vad jag gjort för fel.
Jag förstod inte att "var count"(min "var b") skulle vara räknaren, utan trodde det skulle va värdet som den ska öka med.

jag har kollat in den länken en del också när jag letat exempel. Men jag kan tycka de är lite otydliga med vissa funktioner där också, alternativt är det väl jag som är lite bakom flötet!

Skrivet av giplet:

Varför jag var lite elak och svarade dig med motfrågor är för att du inte borde göra dessa felen. Du verkar mest ha slängt ihop lite kod utan att tänka. Ska du lära dig så måste du sätta dig och fundera över vad som händer. Efter den tidigare diskussionen i tråden så borde det vara uppenbart att om du vill att koden ska hålla reda på något eller räkna ut något så bör man spara det i en variabel.

I detta fallet så kan man räkna ut antalet loopar ifrån de andra ingående värdena, men det är inte alltid man kan det utan måste ha en variabel som håller reda på det. Vanligtvis en variabel för varje sak man vill hålla reda på.

Ingen fara och inget jag tog som elakt. Jag lär mig bra på att ifrågasättas!

Att det kan se ut som jag bara slänger ihop något kan nog bero på att jag kollar väldigt mycket på olika exempel. Vissa är mer, andra är mindre detaljerade. Med en gnutta okunskap kan det bli hur galet som helst emellanåt!
Min inlärningstaktik är väl trial and error på varje ny funktion, när jag väl får det att fungera så försöker jag beskåda koden tills jag förstår vilket som gör vad.