Arbejde med flag i JavaScript
Nu skal vi lære at arbejde med flag.
Et flag er en speciel variabel, som
kun kan antage to værdier: true
og false. Med flag kan man løse
opgaver, der kontrollerer fraværet af noget:
for eksempel kan man kontrollere, at der i et array
ikke er noget element med en bestemt værdi. Lad os
komme i gang.
Lad os løse følgende opgave: givet et array
med tal, skal du kontrollere, om det indeholder
et element med værdien 3 eller ej. Hvis
det gør - udskriv '+++', hvis ikke -
udskriv '---'.
Lad os først prøve at udskrive '+++'.
For at gøre dette gennemgår vi alle elementer i vores array
og med en if vil vi spørge - er det aktuelle
element lig med værdien 3. Hvis det er lig - udskriver vi
'+++':
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
}
}
Men vores løsning er ikke særlig god: for hvis
der i arrayet ikke er én værdi 3,
men flere, så vil '+++' blive udskrevet flere
gange. Lad os rette vores array (lad os lave
to elementer med værdien 3) og overbevise os selv om dette:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // udskriver flere gange
}
}
Lad os rette problemet: afslut løkken med
break, hvis elementet allerede er fundet:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
break; // afslutter løkken
}
}
Lad os nu prøve at gøre det sådan, at
hvis der slet ikke er nogen elementer med værdien
3 i arrayet, udskrives '---'. En udbredt
misforståelse vil være at tilføje else til
vores if - i dette tilfælde vil '---'
blive udskrevet for alle elementer, der ikke er
3:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // udskrives på element 3
} else {
console.log('---'); // udskrives på elementer 1, 2, 4, 5
}
}
Så ideen om at tilføje else - er en dårlig
ide, den virker ikke. For at løse opgaver af denne
type (sådanne opgaver forekommer ret
hyppigt) bruger man såkaldte flag.
Som allerede nævnt ovenfor, er et flag en
variabel, der kun kan antage to værdier:
true eller false.
Så, lad os lave en variabel flag
med denne betydning: hvis den er lig true,
er der et element 3 i arrayet, og hvis
false, er der ikke sådant et element.
Indledningsvis sætter vi variablen flag
til værdien false - det vil sige, vi antager,
at der ikke er noget element 3 i arrayet:
let arr = [1, 2, 3, 4, 5];
let flag = false; // antager at element 3 ikke er i arrayet
Derefter starter vi en løkke med en if, som vi gjorde
det før. Hvis løkken opdager, at der i arrayet
er et element 3 - så sætter vi variablen flag
til værdien true og forlader løkken
med break:
let arr = [1, 2, 3, 4, 5];
let flag = false; // antager at element 3 ikke er i arrayet
for (let elem of arr) {
if (elem == 3) {
flag = true; // elementet findes - omdefinerer variablen flag
break; // forlader løkken
}
}
Svaret på spørgsmålet, om der er 3 i arrayet
eller ej, kan vi først give efter løkken.
Og dette svar har vi allerede: efter løkken
kunne variablen flag være forblevet false
eller kunne have skiftet sin værdi til true,
hvis løkken opdagede 3 i arrayet:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
// her er variablen flag enten true eller false
Nu kan vi efter løkken lave en if, som
ser på variablen flag og udskriver
på skærmen '+++' eller '---':
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
if (flag === true) {
console.log('+++');
} else {
console.log('---');
}
Givet et array:
let arr = ['a', 'b', 'c', 'd', 'e'];
Kontroller, om der i dette array er et element
'c'. Hvis der er - udskriv '+++',
og hvis ikke - udskriv '---'.
Skriv kode, der vil kontrollere om et tal er primtal eller ej. Et primtal er kun deleligt med en og med sig selv, og er ikke deleligt med andre tal.