Arbeid med flagg i JavaScript
Nå skal vi lære å arbeide med flagg.
Et flagg er en spesiell variabel som
bare kan ha to verdier: true
og false. Med flagg kan man løse
oppgaver som kontrollerer fraværet av noe:
for eksempel kan man sjekke at det i en array
ikke er noe element med en bestemt verdi. La oss
komme i gang.
La oss løse følgende oppgave: gitt en array
med tall, sjekk om den inneholder
et element med verdien 3 eller ikke. Hvis
den gjør det - skriv ut '+++', hvis ikke -
skriv ut '---'.
La oss først prøve å skrive ut '+++'.
For å gjøre dette, la oss gå gjennom alle elementene i arrayen vår
og med en if spørre - er det nåværende
elementet lik verdien 3. Hvis det er likt - skriv ut
'+++':
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
}
}
Men løsningen vår er ikke veldig bra: for hvis
det i arrayen ikke er én verdi 3,
men flere, så vil '+++' skrives ut flere
ganger. La oss endre arrayen vår (la oss lage
to elementer med verdien 3) og overbevise oss om dette:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // vil skrive ut flere ganger
}
}
La oss rette opp problemet: avslutt løkken med
break hvis elementet allerede er funnet:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
break; // avslutter løkken
}
}
La oss nå prøve å gjøre det slik at,
hvis det i arrayen overhodet ikke er noen elementer med verdien
3, skal det skrives ut '---'. En vanlig
misforståelse er å legge til else til
vår if - i så fall vil '---'
skrives ut for alle elementer som ikke er
3:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // vil skrive ut på element 3
} else {
console.log('---'); // vil skrive ut på elementene 1, 2, 4, 5
}
}
Så, ideen om å legge til else er en dårlig
ide, den fungerer ikke. For å løse oppgaver av denne
typen (slike oppgaver forekommer ganske
ofte) bruker man såkalte flagg.
Som nevnt ovenfor, er et flagg en slik
variabel som kan ha to verdier:
true eller false.
Så, la oss lage en variabel flag
med denne betydningen: hvis den er lik true,
da er det et element 3 i arrayen, og hvis
false, da er det ikke et slikt element.
Innledningsvis setter vi variabelen flag
til verdien false - det vil si at vi antar
at elementet 3 ikke er i arrayen:
let arr = [1, 2, 3, 4, 5];
let flag = false; // antar at elementet 3 ikke er i arrayen
Deretter starter vi en løkke med en if slik som vi gjorde
det tidligere. Hvis løkken oppdager at det i arrayen
er et element 3 - så setter vi variabelen flag
til verdien true og avslutter løkken
med break:
let arr = [1, 2, 3, 4, 5];
let flag = false; // antar at elementet 3 ikke er i arrayen
for (let elem of arr) {
if (elem == 3) {
flag = true; // elementet finnes - omdefinerer variabelen flag
break; // avslutter løkken
}
}
Svaret på spørsmålet, om det i arrayen er 3
eller ikke, kan vi bare gi etter løkken.
Og dette svaret har vi allerede: etter løkken
kunne variabelen flag forbli false
eller kunne endre sin verdi til true,
hvis løkken oppdaget 3 i arrayen:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
// her er variabelen flag lik enten true eller false
Nå kan vi etter løkken lage en if, som
ser på variabelen flag og skriver ut
på skjermen '+++' 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('---');
}
Gitt en array:
let arr = ['a', 'b', 'c', 'd', 'e'];
Sjekk om det i denne arrayen er et element
'c'. Hvis det er det - skriv ut '+++',
og hvis ikke - skriv ut '---'.
Skriv kode som skal sjekke om et tall er primtall eller ikke. Et primtall er bare delbart på en og på seg selv, og er ikke delelig på andre tall.