Работа со знамиња во JavaScript

Сега ќе научиме да работиме со знамиња. Знаме е специјална променлива која може да земе само две вредности: true и false. Со помош на знамиња може да се решаваат задачи кои проверуваат отсуство на нешто: на пример, може да се провери дали во низата нема елемент со одредена вредност. Да започнеме.

Да ја решиме следната задача: дадена е низа со броеви, треба да се провери дали во неа има елемент со вредност 3 или не. Ако има - ќе испечатиме '+++', ако нема - ќе испечатиме '---'.

За почеток да се обидеме да испечатиме '+++'. За ова ќе ги поминеме сите елементи на нашата низа и со условна наредба ќе прашаме - дали тековниот елемент е еднаков на вредноста 3. Ако е еднаков - ќе испечатиме '+++':

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

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

Но нашето решение не е многу добро: бидејќи ако во низата ќе има не една вредност 3, туку неколку, тогаш '+++' ќе се испечати неколку пати. Да ја поправиме нашата низа (да направиме два елементи со вредност 3) и да се увериме во ова:

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

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++'); // ќе испечати неколку пати
  }
}

Да ја поправиме грешката: ќе го прекинеме циклусот со помош на break, ако елементот е веќе пронајден:

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

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++');
    break;  // го прекинуваме циклусот
  }
}

Сега да се обидеме да направиме така што, ако во низата воопшто нема елементи со вредност 3, да се испечати '---'. Честа заблуда би било да се додаде else на нашата условна наредба - во овој случај '---' ќе се печати за сите елементи кои не се 3:

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

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++'); // ќе испечати за елементот 3
  } else {
    console.log('---'); // ќе испечати за елементите 1, 2, 4, 5
  }
}

Значи, идејата да се додаде else - е лоша идеја, не работи. За решавање на задачи од овој тип (таквите задачи се среќаваат доволно често) се користат таканаречените знамиња.

Како што беше споменато погоре, знаме е таква променлива, која може да земе две вредности: true или false.

Значи, да направиме променлива flag со таква вредност: ако таа е еднаква на true, тогаш во низата има елемент 3, а ако е false, тогаш таков елемент нема.

Иницијално ќе ја поставиме променливата flag на вредност false - односно ќе сметаме, дека елементот 3 го нема во низата:

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false; // сметаме дека елементот 3 го нема во низата

Потоа ќе пуштиме циклус со условна наредба така, како што го правевме тоа порано. Ако циклусот открие дека во низата има елемент 3 - тогаш ќе ја поставиме променливата flag на вредност true и ќе излеземе од циклусот со помош на break:

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false; // сметаме дека елементот 3 го нема во низата

for (let elem of arr) {
  if (elem == 3) {
    flag = true; // елементот постои - ја менуваме променливата flag
    break; // излегуваме од циклусот
  }
}

Одговорот на прашањето, дали во низата има 3 или не, можеме да го дадеме само по циклусот. И овој одговор веќе го имаме: после циклусот променливата flag можела да остане false или можела да ја смени својата вредност на true, ако циклусот открил во низата 3:

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

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

// овде променливата flag е еднаква или на true, или на false

Сега после циклусот можеме да направиме условна наредба, која ќе ја погледне променливата flag и ќе испечати на екран '+++' или '---':

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

Дадена е низа:

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

Проверете дали во оваа низа има елемент 'c'. Ако има - испечатете '+++', а ако нема - испечатете '---'.

Задание 2

Напишете код кој ќе проверува дали бројот е прост или не. Прост број се дели само на единица и на самиот себе, и не се дели на други броеви.