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 '+++':

javascriptlet 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:

javascriptlet 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:

javascriptlet 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:

javascriptlet 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:

javascriptlet 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:

javascriptlet 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:

javascriptlet 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 '---':

javascriptlet 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('---');
}
Задание 1

Gitt en array:

javascriptlet 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 '---'.

Задание 2

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.