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