Как прервать цикл for
Циклы – простой способ сделать какое-то действие несколько раз. Эта глава руководства JavaScript Guide познакомит вас с различными операторами доступными в JavaScript.
Вы можете представить цикл в виде компьютеризированной версии игры, где вы говорите кому-то сделать X шагов в одном направлении, затем Y шагов в другом; для примера, идея игры “Иди 5 шагов на восток” может быть выражена в виде цикла:
var step; for (step = 0; step < 5; step++) { console.log(‘Идём 1 шаг на восток’); }
Существует множество различных видов циклов, но все они по сути делают тоже самое: повторяют какое-либо действие несколько раз (не забывайте про нулевой раз повторения, отсчёт в массиве начинается с 0). Различные по строению циклы предлагают разные способы для определения начала и окончания цикла. Для различных задач программирования существуют свои операторы цикла, с помощью которых они решаются намного проще.
Операторы предназначенные для организации циклов в JavaScript:
- Цикл_for
- Цикл_do…while
- Цикл_while
- Метка_(label)
- break
- continue
- for…in
- for…of
Цикл for
Цикл for повторяет действия, пока не произойдёт какое-либо специальное событие завершения цикла. Оператор for в JavaScript аналогичен оператору for в Java и C. Объявление оператора for выглядит следующим образом:
for ([начало]; [условие]; [шаг]) выражения
При его выполнении происходит следующее:
- Выполняется выражение начало, если оно указано. Это выражение обычно инициализирует один или несколько счётчиков, но синтаксис позволяет выражению быть любой сложности. Также используется для объявления переменных.
- Выполняется условие. Если условие истинно, то выполняются выражения. Если оно ложно, цикл for прерывается. Если же условие полностью пропущено, то оно считается истинным.
- Выполняются выражения. Чтобы выполнить несколько выражений, используются блок-выражение { … } для группировки выражений.
- Обновляется шаг, если он есть, а затем управление возвращается к шагу 2.
Пример
В следующей функции есть цикл for, который считает количество выбранных жанров в списке прокрутки (элемент <select>, который позволяет выбрать несколько элементов). Цикл for объявляет переменную i и задаёт ей значение 0. Также он проверяет, что i меньше количества элементов в элементе <select>, выполняет оператор if и увеличивает i на один после каждого прохода цикла.
<form name=”selectForm”> <p> <label for=”musicTypes”>Выберите некоторые жанры музыки, а затем нажмите на кнопку ниже:</label> <select id=”musicTypes” name=”musicTypes” multiple=”multiple”> <option selected=”selected”>R&B</option> <option>Jazz</option> <option>Blues</option> <option>New Age</option> <option>Classical</option> <option>Opera</option> </select> </p> <p><input id=”btn” type=”button” value=”Как много выбрано?” /></p> </form> <script> howMany(selectObject) { var numberSelected = 0; for (var i = 0; i < selectObject.options.length; i++) { if (selectObject.options[i].selected) { numberSelected++; } } return numberSelected; } var btn = document.getElementById(“btn”); btn.addEventListener(“click”, (){ alert(‘Выбрано элементов: ‘ + howMany(document.selectForm.musicTypes)) }); </script>
Цикл do…while
Цикл do…while повторяется пока заданное условие истинно. Оператор do…while имеет вид:
do выражения while (условие);
выражения выполняются пока условие истинно. Чтобы использовать несколько выражений, используйте блок-выражение { … }, чтобы сгруппировать их. Если условие истинно, выражения выполнятся снова. В конце каждого прохода условие проверяется. Если условие ложно, выполнение приостанавливается и управление передаётся выражению после do…while.
Пример
В следующем примере, цикл do выполнится минимум 1 раз и запускается снова, пока i меньше 5.
do { i += 1; console.log(i); } while (i < 5);
Цикл while
Цикл while выполняет выражения пока условие истинно. Выглядит он так:
while (условие) выражения
Если условие становится ложным, выражения в цикле перестают выполняться и управление переходит к выражению после цикла.
Условие проверяется на истинность до того, как выполняются выражения в цикле. Если условие истинно, выполняются выражения, а затем условие проверяется снова. Если условие ложно, выполнение приостанавливается и управление переходит к выражению после while.
Чтобы использовать несколько выражений, используйте блок выражение { … }, чтобы сгруппировать их.
Пример 1
Следующий цикл while работает, пока n меньше трёх:
var n = 0; var x = 0; while (n < 3) { n++; x += n; }
С каждой итерацией, цикл увеличивает n и добавляет это значение к x. Поэтому, x и n получают следующие значения:
- После первого прохода: n = 1 и x = 1
- После второго: n = 2 и x = 3
- После третьего прохода: n = 3 и x = 6
После третьего прохода, условие n < 3 становится ложным, поэтому цикл прерывается.
Пример 2
Избегайте бесконечных циклов. Убедитесь, что условие цикла в итоге станет ложным; иначе, цикл никогда не прервётся. Выражения в следующем цикле while будут выполняться вечно, т.к. условие никогда не станет ложным:
while (true) { console.log(“Hello, world”); }
Метка (label)
Метка представляет собой оператор с идентификатором, который позволяет вам ссылаться на какое-то место в вашей программе. Например, вы можете использовать метку, чтобы обозначить цикл, а затем использовать операторы break или continue, чтобы указать, должна ли программа прерывать цикл или продолжать его выполнение.
Синтаксис метки следующий:
метка : оператор
Значение метки может быть любым корректным JavaScript идентификатором, не являющимся зарезервированным словом. Оператор, указанный вами после метки может быть любым выражением.
Пример
В этом примере, метка markLoop обозначает цикл while.
markLoop: while (theMark == true) { doSomething(); }
break
Используйте оператор break, чтобы прерывать цикл, переключать управление или в сочетании с оператором метка.
- Когда вы используете break без метки, он прерывает циклы while, do-while и for или сразу переключает управление к следующему выражению.
- Когда вы используете break с меткой, он прерывает специально отмеченное выражение.
Синтаксис оператора может быть таким:
- break;
- break Метка;
Первая форма синтаксиса прерывает цикл совсем или переключает управление; вторая прерывает специально обозначенное выражение.
Пример 1
Следующий пример проходит по элементам в массиве, пока не найдёт элемент, чьё значение – theValue:
for (i = 0; i < a.length; i++) { if (a[i] == theValue) { break; } }
Пример 2: Прерывание метки
var x = 0; var z = 0 labelCancelLoops: while (true) { console.log(“Внешний цикл: ” + x); x += 1; z = 1; while (true) { console.log(“Внутренний цикл: ” + z); z += 1; if (z === 10 && x === 10) { break labelCancelLoops; } else if (z === 10) { break; } } }
continue
Оператор continue используется, чтобы шагнуть на шаг вперёд в циклах while, do-while, for или перейти к метке.
- Когда вы используете continue без метки, он прерывает текущую итерацию циклов while, do-while и for и продолжает выполнение цикла со следующей итерации. В отличие от break, continue не прерывает выполнение цикла полностью. В цикле while он прыгает к условию. А в for увеличивает шаг.
- Когда вы используете continue с меткой, он применяется к циклу с этой меткой.
Синтаксис continue может выглядеть так:
- continue;
- continue Метка;
Пример 1
Следующий пример показывает цикл while с оператором continue, который срабатывает, когда значение i равно 3. Таким образом, n получает значения 1, 3, 7 и 12.
var i = 0; var n = 0; while (i < 5) { i++; if (i == 3) { continue; } n += i; }
Пример 2
Выражение, отмеченное checkiandj содержит выражение отмеченное checkj. При встрече с continue, программа прерывает текущую итерацию checkj и начинает следующую итерацию. Каждый раз при встрече с continue, checkj переходит на следующую итерацию, пока условие возвращает false. Когда возвращается false, после вычисления остатка от деления checkiandj, checkiandj переходит на следующую итерацию, пока его условие возвращает false. Когда возвращается false, программа продолжает выполнение с выражения после checkiandj.
Если у continue проставлена метка checkiandj, программа может продолжиться с начала метки checkiandj.
checkiandj: while (i < 4) { console.log(i); i += 1; checkj: while (j > 4) { console.log(j); j -= 1; if ((j % 2) != 0) { continue checkj; } console.log(j + ” чётное.”); } console.log(“i = ” + i); console.log(“j = ” + j); }
for…in
Оператор for…in проходит по всем перечислимым свойствам объекта. JavaScript выполнит указанные выражения для каждого отдельного свойства. Цикл for…in выглядит так:
for (variable in object) { выражения }
Пример
Следующая функция берёт своим аргументом объект и его имя. Затем проходит по всем свойствам объекта и возвращает строку, которая содержит имена свойств и их значения.
dump_props(obj, obj_name) { var result = “”; for (var i in obj) { result += obj_name + “.” + i + ” = ” + obj[i] + “<br>”; } result += “<hr>”; return result; }
Для объекта car со свойствами make и model, результатом будет:
car.make = Ford car.model = Mustang
Пример №2
Также, по ключу можно выводить значение:
let obj = {model: ‘AUDI A8’, year: ‘2019’, color: ‘brown’} for (key in obj) { console.log(`${key} = ${obj[key]}`); } // model = AUDI A8 // year = 2019 // color = brown
Массивы
Хотя, очень заманчиво использовать for…in как способ пройтись по всем элементам Array, этот оператор возвращает имя свойств определённых пользователем помимо числовых индексов. Таким образом лучше использовать стандартный for для числовых индексов при взаимодействии с массивами, поскольку оператор for…in проходит по определённым пользователем свойствам в дополнение к элементам массива, если вы изменяете массив, например, добавляете свойства и методы.
Пример
let arr = [‘AUDI A8’, ‘2019’, ‘brown’]; arr.cost = ‘$100.000’; for (key in arr) { console.log(`${key} = ${arr[key]}`); } // 0 = AUDI A8 // 1 = 2019 // 2 = brown // cost = $100.000
for…of
Оператор for…of создаёт цикл, проходящий по перечислимым объектам (en-US) (включая Array, Map, Set, объект arguments (en-US) и так далее), вызывая на каждой итерации функцию с выражениями, которые надо выполнить для получения значения каждого отдельного свойства.
for (variable of object) { выражения }
Следующий пример показывает разницу между циклами for…of и for…in. Тогда как for…in проходит по именам свойств, for…of проходит по значениям свойств:
let arr = [3, 5, 7]; arr.foo = “hello”; for (let i in arr) { console.log(i); } for (let i of arr) { console.log(i); }
- « Предыдущая статья
- Следующая статья »
Источник
Циклы используются для того, чтобы некоторый участок кода выполнился несколько раз подряд.
Зачем это нужно – представьте, что вам нужно возвести в квадрат 100 элементов массива. Если обращаться к каждому элементу отдельно по его ключу – это займет 100 строчек кода, и для того, чтобы написать этого код, нужно будет потратить довольно много времени.
Но это не нужно – у нас есть возможность сделать так, чтобы JavaScript за нас выполнил некоторую операцию нужное количество раз. Например, возвел все элементы массива в квадрат.
Делается это с помощью циклов.
Цикл while
Цикл while будет выполняться до тех пор, пока верно (истинно) выражение, переданное ему параметром. Смотрите синтаксис:
while ( пока выражение истинно ) { выполняем этот код циклически; в начале каждого цикла проверяем выражение в круглых скобках } /* Цикл закончится, когда выражение перестанет быть истинным. Если оно было ложным изначально – то он не выполнится ни разу! */
В принципе, цикл while может выполняться бесконечно (но это приведет к зависанию скрипта!), достаточно передать ему выражение, которое никогда не станет ложным. Например, так:
var test = true; while (test === true) { /* Написанный здесь код будет выполняться ‘вечно’ (пока скрипт не будет остановлен принудительно). Не стоит это повторять – это приведет к зависанию сервера! */ }
Давайте последовательно выведем с помощью цикла while числа от одного до пяти:
var i = 0; //счетчик цикла while (i < 5) { /* С помощью оператора ++ увеличиваем i на единицу при каждом проходе цикла. */ i++; alert(i); }
Обратите внимание на переменную i – она является так называемым счетчиком цикла. Счетчики используются для того, чтобы подсчитывать, сколько раз выполнился цикл. Кроме того, они выполняют вспомогательную роль – в нашей задаче мы использовали счетчик, чтобы вывести цифры от 1 до 5.
Для счетчиков принято использовать буквы i, j и k.
Цикл for
Цикл for является альтернативой while. Он более сложен для понимания, но чаще всего его любят больше, чем while за то, что он занимает меньше строчек.
for ( начальные команды; условие окончания цикла; команды после прохода цикла ) { тело цикла }
Начальные команды – это то, что выполнится перед стартом цикла. Они выполнятся только один раз. Обычно там размещают начальные значения счетчиков, пример: i = 0.
Условие окончания цикла – пока оно истинное, цикл будет работать, пример: i .
Команды после прохода цикла – это команды, которые будут выполнятся каждый раз при окончании прохода цикла. Обычно там увеличивают счетчики, например: i++.
Давайте с помощью цикла for выведем последовательно числа от 0 до 9:
/* В начале цикла i будет равно нулю, цикл будет выполнятся пока i < 10, после каждого прохода к i прибавляется единица: */ for (var i = 0; i < 10; i++) { alert(i); //выведет 0, 1, 2… 9 }
Цикл без тела
Фигурные скобки в циклах можно не указывать – в этом случае цикл выполнит только одну строку под ним (не рекомендую так делать, часто приводит к ошибкам):
for (var i = 0; i < 10; i++) //<— точки с запятой нет alert(i); //выведет 0, 1, 2… 9
А вот если после ) поставить точку с запятой – цикл закроется и следующая строка в него не попадет, получится так называемый цикл без тела, который в нашем случае просто прокрутится и в результате изменит значение переменной i:
for (var i = 0; i < 10; i++); //<— точка с запятой есть alert(i); //выведет 9
Такой цикл иногда используется, вы увидите примеры его применения при разборах задач на циклы.
Несколько команд в цикле for
Если нам необходимо выполнить несколько команд в круглых скобках – указываем их через запятую:
Давайте разберем приведенный цикл: до прохода цикла выполнятся две команды: var i = 0, j = 2 (обратите внимание на то, что var тут пишется один раз), а после каждой итерации – целых три: i++, j++, i = i + j.
Этот пример с точки зрения программирования никакой особой пользы не несет, просто схематически показывает, что так можно делать. Запомните его, в дальнейшем это вам пригодится.
Цикл for для массивов
С помощью цикла for можно последовательно перебрать элементы массива. Делается это следующим образом:
var arr = [1, 2, 3, 4, 5]; for (var i = 0; i <= arr.length-1; i++) { alert(arr[i]); //выведет 1, 2, 3, 4, 5 }
Ключевым моментом является то, что мы делаем перебор от нуля до длины массива минус 1 (так как номер последнего элемента массива на единицу меньше его длины).
Можно не отнимать единицу, а место <= сделать <:
var arr = [1, 2, 3, 4, 5]; for (var i = 0; i < arr.length; i++) { alert(arr[i]); //выведет 1, 2, 3, 4, 5 }
Цикл for-in
Для перебора объекта используется так называемый цикл for-in. Давайте посмотрим, как он работает.
Пусть у нас дан такой объект:
var obj = {Коля: 200, Вася: 300, Петя: 400};
Давайте выведем его ключи. Для этого используем такую конструкцию: for (key in obj), где obj – это объект, который мы перебираем, а key – это переменная, в которую последовательно будут ложится ключи объекта (ее название может быть любым, какое придумаете – такое и будет).
То есть в данном цикле не надо указывать условие окончания – он будет перебирать ключи объекта, пока они не закончатся.
Итак, вот так мы выведем все ключи объекта (по очереди):
var obj = {Коля: 200, Вася: 300, Петя: 400}; for (key in obj) { alert(key); //выведет ‘Коля’, ‘Вася’, ‘Петя’ }
Если нам нужны не ключи, а значения, нужно обратиться к нашему объекту по ключу, вот так: obj[key].
Как это работает: в переменной key сначала будет ‘Коля’, то есть obj[key] в данном случае все равно, что obj[‘Коля’], при следующем проходе цикла в переменной key будет ‘Вася’ и так далее.
Итак, выведем все элементы объекта:
var obj = {Коля: 200, Вася: 300, Петя: 400}; for (key in obj) { alert(obj[key]); //выведет 200, 300, 400 }
Инструкция break
Иногда нам необходимо прервать выполнение цикла досрочно, в случае с циклом for это значит до того, как цикл переберет все элементы массива.
Зачем такое может понадобится? Например, перед нами стоит задача выводить элементы массива до тех пор, пока не встретится число 3. Как только встретится – цикл должен завершить свою работу.
Такое можно сделать с помощью инструкции break – если выполнение цикла дойдет до нее, цикл закончит свою работу.
Давайте решим приведенную выше задачу – оборвем цикл, как только нам встретится число 3:
var arr = [1, 2, 3, 4, 5]; for (var i = 0; i < arr.length; i++) { if (arr[i] === 3) { break; //выходим из цикла } else { alert(arr[i]); } }
Инструкция continue
Существует также инструкция continue, при достижении которой цикл начинает новую итерацию. Иногда может быть полезна для упрощения кода, хотя практически всегда задачу можно решить и без нее.
Что вам делать дальше:
Приступайте к решению задач по следующей ссылке: задачи к уроку.
Когда все решите – переходите к изучению новой темы.
Источник
Циклы, как и условия – еще одно из важнейших понятий в программировании.
Циклы нужны для того, чтобы автоматизировать выполнение однотипных действий. Это значительно облегчает многие задачи.
Напомним, что в практическом задании №1 мы задавали пользователю два раза одни и те же вопросы. Циклы позволяют избавиться от повторения подобных действий.
Примеры циклов из реальной жизни.
В JavaScript существует три способа реализации циклов.
Цикл while
Цикл while (в перев. пока) – первый способ реализации циклов в JavaScript. И это самый простой цикл.
Пример 1.1
let num = 50; while (num Выполняется действие */ console.log(num); num++; }
Результат
50 51 52 53 54
Это пример простейшего цикла. Условие в круглых скобках звучит так: пока переменная num меньше 55 (определенного значения), выполняется действие в фигурных скобках: вывод переменной num в консоль и далее ее инкремент (увеличение на единицу).
Цикл while – Вторая форма записи
Существует иная форма записи цикла while, при которой сначала предлагается выполнить действие, после чего проверить условие.
Вторая форма записи цикла while имеет другой синтаксис.
Пример 2.1
let num = 50; do { console.log(num); num++; } while (num
Результат
50 51 52 53 54
Здесь используется ключевое слово do (делать/сделать) – делаем действие, пока выполняется условие.
Цикл for
Цикл for – это третий и наиболее часто используемый способ реализации циклов в JavaScript.
Пример 3.1
for (let i = 1; i
Результат
1 2 3 4 5 6 7
Условие цикла for (в круглых скобках) как правило состоит из трех аргументов:
– сначала создается переменная i равная 0 или 1 (не обязательное, но часто используемое значение);
– второй аргумент цикла for – это условие, при котором цикл завершает свою работу. В данном примере пока переменная i меньше 8 i – цикл будет работать;
– третий аргумент цикла for – это шаг цикла, то есть что будет происходить в новом цикле. Чаще всего на практике используется инкремент (таким образом, новый цикл начинается с нового значения переменной i).
В фигурных скобках указывается выполняемое действие.
Пример 3.2
let num = 50; for (let i = 1; i
Результат
50 51 52 53 54 55 56
Со временем Вы оцените достоинства применения циклов. Например, именно циклы позволяют добавить десятки и сотни товаров в каталог интернет-магазина при помощи одного небольшого скрипта.
Как прервать цикл – break
Иногда возникает потребность прервать цикл: закончить выполнять действие при определенных условиях. Для этого используется ключевое слово break. Рассмотрим пример.
Пример 3.3
for (let i = 1; i
Результат
1 2 3 4 5
Оператор continue
Оператор continue позволяет частично прервать цикл: с его помощью мы можем пропустить не нужный шаг.
Пример 3.4
for (let i = 1; i
Результат
1 2 3 4 5 7 8 9
При i === 6 цикл прерывается, но возобновляется при следующем значении. На практике это бывает полезным.
Итак, здесь мы рассмотрели три вида циклов, которые встречаются в JavaScript.
Не стоит путать циклы с методами перебора, о которых речь пойдет позже.
Читайте также…
Источник