Flagstrādāšana JavaScript

Tagad mēs iemācīsimies strādāt ar flagiem. Flags ir īpašs mainīgais, kas var iegūt tikai divas vērtības: true un false. Ar flagu palīdzību var atrisināt uzdevumus, kas pārbauda kaut kā neesamību: piemēram, var pārbaudīt, vai masīvā nav elementa ar noteiktu vērtību. Sāksim.

Atrisināsim šādu uzdevumu: dots masīvs ar skaitļiem, jāpārbauda, vai tajā atrodas elements ar vērtību 3 vai nē. Ja atrodas - izvadīsim '+++', ja nē - izvadīsim '---'.

Vispirms mēģināsim izvadīt '+++'. Lai to izdarītu, iziesim cauri visiem masīva elementiem un ar if noskaidrosim - vai pašreizējais elements ir vienāds ar vērtību 3. Ja ir vienāds - izvadīsim '+++':

javascriptlet arr = [1, 2, 3, 4, 5];

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++');
  }
}

Bet mūsu risinājums nav īsti labs: jo, ja masīvā būs nevis viena vērtība 3, bet vairākas, tad '+++' tiks izvadīts vairākas reizes. Labosim mūsu masīvu (izveidosim divi elementus ar vērtību 3) un par to pārliecināsimies:

javascriptlet arr = [1, 2, 3, 4, 3, 5];

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++'); // izvadīs vairākas reizes
  }
}

Izlabosim problēmu: pārtrauksim ciklu ar break, ja elements jau ir atrasts:

javascriptlet arr = [1, 2, 3, 4, 3, 5];

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++');
    break;  // pārtrauksim ciklu
  }
}

Tagad mēģināsim panākt, lai, ja masīvā vispār nav elementu ar vērtību 3, tiktu izvadīts '---'. Izplatīts pārpratums būtu pievienot else mūsu if - šajā gadījumā '---' tiks izvadīts visos elementos, kas nav 3:

javascriptlet arr = [1, 2, 3, 4, 5];

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++'); // izvadīs uz elementa 3
  } else {
    console.log('---'); // izvadīs uz elementiem 1, 2, 4, 5
  }
}

Tātad, ideja pievienot else - slikta ideja, nedarbīga. Lai atrisinātu šāda veida uzdevumus (šādi uzdevumi sastopami pietiekami bieži) izmanto tā sauktos flagus.

Kā jau minēts iepriekš, flags ir tāds mainīgais, kas var iegūt divas vērtības: true vai false.

Tātad, izveidosim mainīgo flag ar šādu nozīmi: ja tas ir vienāds ar true, tad masīvā ir elements 3, bet ja false, tad šāda elementa nav.

Sākotnēji iestatīsim mainīgo flag uz vērtību false - tas ir, pieņemsim, ka elementa 3 masīvā nav:

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false; // pieņemam, ka elementa 3 nav masīvā

Pēc tam palaidīsim ciklu ar if tā, kā mēs to darījām agrāk. Ja cikls atklās, ka masīvā ir elements 3 - tad iestatīsim mainīgo flag uz vērtību true un iziesim no cikla ar break:

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false; // pieņemam, ka elementa 3 nav masīvā

for (let elem of arr) {
  if (elem == 3) {
    flag = true; // elements ir - pārdefinēsim mainīgo flag
    break; // iziesim no cikla
  }
}

Atbildi uz jautājumu, vai masīvā ir 3 vai nē, mēs varam dot tikai pēc cikla. Un šī atbilde mums jau ir: pēc cikla mainīgais flag varēja palikt false vai varēja mainīt savu vērtību uz true, ja cikls atklāja masīvā 3:

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false;

for (let elem of arr) {
  if (elem == 3) {
    flag = true;
    break;
  }
}

// šeit mainīgais flag ir vai nu true, vai false

Tagad pēc cikla mēs varam izveidot if, kurš apskatīsies uz mainīgo flag un izvadīs ekrānā '+++' vai '---':

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

Dots masīvs:

javascriptlet arr = ['a', 'b', 'c', 'd', 'e'];

Pārbaudiet, vai šajā masīvā ir elements 'c'. Ja ir - izvadiet '+++', bet ja nav - izvadiet '---'.

Задание 2

Uzrakstiet kodu, kas pārbaudīs skaitli, vai tas ir pirmskaitlis vai nē. Pirmskaitlis dalās tikai ar vieninieku un pašu sevi, un nedalās ar citiem skaitļiem.