Работа со знамиња во JavaScript
Сега ќе научиме да работиме со знамиња.
Знаме е специјална променлива која
може да земе само две вредности: true
и false. Со помош на знамиња може да се решаваат
задачи кои проверуваат отсуство на нешто:
на пример, може да се провери дали во низата
нема елемент со одредена вредност. Да
започнеме.
Да ја решиме следната задача: дадена е низа
со броеви, треба да се провери дали во неа
има елемент со вредност 3 или не. Ако
има - ќе испечатиме '+++', ако нема -
ќе испечатиме '---'.
За почеток да се обидеме да испечатиме '+++'.
За ова ќе ги поминеме сите елементи на нашата низа
и со условна наредба ќе прашаме - дали тековниот
елемент е еднаков на вредноста 3. Ако е еднаков - ќе испечатиме
'+++':
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
}
}
Но нашето решение не е многу добро: бидејќи ако
во низата ќе има не една вредност 3,
туку неколку, тогаш '+++' ќе се испечати неколку
пати. Да ја поправиме нашата низа (да направиме
два елементи со вредност 3) и да се увериме во ова:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // ќе испечати неколку пати
}
}
Да ја поправиме грешката: ќе го прекинеме циклусот со помош
на break, ако елементот е веќе пронајден:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
break; // го прекинуваме циклусот
}
}
Сега да се обидеме да направиме така што,
ако во низата воопшто нема елементи со вредност
3, да се испечати '---'. Честа
заблуда би било да се додаде else на
нашата условна наредба - во овој случај '---' ќе
се печати за сите елементи кои не се
3:
let 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 го нема во низата:
let arr = [1, 2, 3, 4, 5];
let flag = false; // сметаме дека елементот 3 го нема во низата
Потоа ќе пуштиме циклус со условна наредба така, како што го правевме
тоа порано. Ако циклусот открие дека во низата
има елемент 3 - тогаш ќе ја поставиме променливата flag
на вредност true и ќе излеземе од циклусот
со помош на break:
let 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:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
// овде променливата flag е еднаква или на true, или на false
Сега после циклусот можеме да направиме условна наредба, која
ќе ја погледне променливата flag и ќе испечати
на екран '+++' или '---':
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('---');
}
Дадена е низа:
let arr = ['a', 'b', 'c', 'd', 'e'];
Проверете дали во оваа низа има елемент
'c'. Ако има - испечатете '+++',
а ако нема - испечатете '---'.
Напишете код кој ќе проверува дали бројот е прост или не. Прост број се дели само на единица и на самиот себе, и не се дели на други броеви.