Att arbeta med flaggor i JavaScript
Nu ska vi lära oss att arbeta med flaggor.
En flagga är en speciell variabel som
bara kan anta två värden: true
och false. Med hjälp av flaggor kan man lösa
uppgifter som kontrollerar frånvaron av något:
till exempel kan man kontrollera att det i en array
finns inget element med ett visst värde. Låt oss
komma igång.
Låt oss lösa följande uppgift: given en array
med siffror, kontrollera om den innehåller
ett element med värdet 3 eller inte. Om
det finns - skriv ut '+++', om det inte finns -
skriv ut '---'.
Låt oss först försöka skriva ut '+++'.
För att göra detta, låt oss gå igenom alla element i vår array
och med en if-sats fråga - är det aktuella
elementet lika med värdet 3. Om det är lika - skriv ut
'+++':
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
}
}
Men vår lösning är inte särskilt bra: för om
det i arrayen inte finns ett värde 3,
utan flera, så kommer '+++' att skrivas ut flera
gånger. Låt oss ändra vår array (vi skapar
två element med värdet 3) och se till om detta:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // kommer att skrivas ut flera gånger
}
}
Låt oss åtgärda problemet: avsluta loopen med hjälp av
break, om elementet redan har hittats:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
break; // avslutar loopen
}
}
Låt oss nu försöka göra så att,
om det i arrayen inte finns några element med värdet
3 alls, så skrivs '---' ut. Ett vanligt
misstag är att lägga till else till
vår if-sats - i så fall kommer '---' att
skrivas ut för alla element som inte är
3:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // kommer att skrivas ut för elementet 3
} else {
console.log('---'); // kommer att skrivas ut för elementen 1, 2, 4, 5
}
}
Så, idén att lägga till else - är en dålig
idé, det fungerar inte. För att lösa uppgifter av denna
typ (sådana uppgifter förekommer ganska
ofta) använder man sig av så kallade flaggor.
Som nämnts ovan är en flagga en sådan
variabel som bara kan anta två värden:
true eller false.
Så, låt oss skapa en variabel flag
med detta värde: om den är lika med true,
så finns elementet 3 i arrayen, och om den är
false, så finns inget sådant element.
Inledningsvis sätter vi variabeln flag
till värdet false - det vill säga vi antar
att elementet 3 inte finns i arrayen:
let arr = [1, 2, 3, 4, 5];
let flag = false; // antar att elementet 3 inte finns i arrayen
Sedan startar vi en loop med en if-sats som vi gjorde
det tidigare. Om loopen upptäcker att det i arrayen
finns ett element med värdet 3 - så sätter vi variabeln flag
till värdet true och avslutar loopen
med hjälp av break:
let arr = [1, 2, 3, 4, 5];
let flag = false; // antar att elementet 3 inte finns i arrayen
for (let elem of arr) {
if (elem == 3) {
flag = true; // elementet finns - omdefinierar variabeln flag
break; // avslutar loopen
}
}
Svaret på frågan, om det i arrayen finns 3
eller inte, kan vi bara ge efter loopen.
Och det svaret har vi redan: efter loopen
kan variabeln flag ha förblivit false
eller ha ändrat sitt värde till true,
om loopen upptäckte 3 i arrayen:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
// här är variabeln flag antingen true eller false
Nu kan vi efter loopen göra en if-sats, som
tittar på variabeln flag och skriver
ut '+++' eller '---' på skärmen:
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('---');
}
Given en array:
let arr = ['a', 'b', 'c', 'd', 'e'];
Kontrollera att det i denna array finns ett element
'c'. Om det finns - skriv ut '+++',
och om det inte finns - skriv ut '---'.
Skriv kod som kommer att kontrollera om ett tal är primtal eller inte. Ett primtal är bara delbart med ett och med sig självt, och är inte delbart med andra tal.