Работа с флагове в 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'. Ако има - изведете '+++',
а ако няма - изведете '---'.
Напишете код, който ще проверява числото дали е просто или не. Простото число се дели само на единица и на себе си, и не се дели на други числа.