# Работа с флагами в 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'`. Если есть - выведите `'+++'`, а если нет - выведите `'---'`.

Напишите код, который будет проверять число на то, простое оно или нет. Простое число делится только на единицу и на само себя, и не делится на другие числа.

←→
↑
en ru