Lippude kasutamine JavaScriptis

Praegu õpime töötama lippudega. Lipp on spetsiaalne muutuja, mis võib võtta ainult kaks väärtust: true ja false. Lippude abil saab lahendada ülesandeid, mis kontrollivad millegi puudumist: näiteks saab kontrollida, kas massiivis puudub element kindla väärtusega. Hakkame pihta.

Lahendame järgmise ülesande: antud on massiiv arvudega, tuleb kontrollida, kas selles on element väärtusega 3 või mitte. Kui on - trüki '+++', kui ei ole - trüki '---'.

Alustuseks proovime trükkida '+++'. Selleks loeme läbi kõik meie massiivi elemendid ja if-tingimusega küsime - kas praegune element on võrdne väärtusega 3. Kui on võrdne - trüki '+++':

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

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

Aga meie lahendus pole eriti hea: sest kui massiivis poleks mitte üks väärtus 3, vaid mitu, siis '+++' trükitakse mitu korda. Parandame oma massiivi (teeme kaks elementi väärtusega 3) ja veendume selles:

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

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++'); // trükib mitu korda
  }
}

Parandame probleemi: lõpetame tsükli abiga break, kui element on juba leitud:

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

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++');
    break;  // lõpetame tsükli
  }
}

Proovime nüüd teha nii, et kui massiivis üldse pole elemente väärtusega 3, trükitaks '---'. Levinud eksiarvamus on lisada else meie if-le - sel juhul '---' trükitakse kõikidele elementidele, mis ei ole 3:

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

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++'); // trükib elemendil 3
  } else {
    console.log('---'); // trükib elementidel 1, 2, 4, 5
  }
}

Niisiis, idee lisada else - halb idee, ei tööta. Sellist tüüpi ülesannete lahendamiseks (selliseid ülesandeid kohtab piisavalt sageli) kasutatakse nn lippe.

Nagu juba eespool mainitud, on lipp selline muutuja, mis võib võtta kaks väärtust: true või false.

Niisiis, teeme muutuja flag sellise väärtusega: kui see on võrdne true, siis massiivis on element 3, aga kui false, siis sellist elementi pole.

Algselt paneme muutuja flag väärtuseks false - see tähendab, et loeme, et elementi 3 massiivis pole:

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false; // loeme, et elementi 3 pole massiivis

Seejärel käivitame tsükli if-iga nii, nagu me tegime seda varem. Kui tsükkel tuvastab, et massiivis on element 3 - siis paneme muutuja flag väärtuseks true ja väljume tsüklist kasutades break:

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false; // loeme, et elementi 3 pole massiivis

for (let elem of arr) {
  if (elem == 3) {
    flag = true; // element on olemas - määrame muutuja flag ümber
    break; // väljume tsüklist
  }
}

Vastuse küsimusele, kas massiivis on 3 või mitte, saame anda alles pärast tsüklit. Ja see vastus on meil juba olemas: pärast tsüklit muutuja flag võis jääda false või võis muuta oma väärtuse true-ks, kui tsükkel tuvastas massiivis 3:

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

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

// siin on muutuja flag võrdne kas true või false

Nüüd saame pärast tsüklit teha if-i, mis vaatab muutujale flag ja trükib ekraanile '+++' või '---':

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

Antud on massiiv:

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

Kontrollige, kas selles massiivis on element 'c'. Kui on - trüki '+++', aga kui ei ole - trüki '---'.

Задание 2

Kirjutage kood, mis kontrollib arvu, kas see on algarv või mitte. Algarv jagub ainult ühega ja iseendaga, ning ei jagu teiste arvudega.