Javascript do while примеры. Примеры использования for. Операторы continue и break

Цикл - это управляющая инструкция, позволяющая повторять выполнение программного кода определённое количество раз. Каждое отдельное исполнение инструкций в теле цикла называется итерацией .

Цикл while

Синтаксис цикла while:

Выражение в круглых скобках называется условием выполнения цикла или кратко условием . Сначала вычисляется значение выражения. Полученное значение, если необходимо, неявно преобразуется к булеву типу. Если результатом вычисления выражения является значение true , то инструкция, расположенная в теле цикла, выполняется, затем управление передаётся в начало цикла и условие вычисляется снова. Если результатом вычисления выражения является значение false , интерпретатор завершает работу цикла и переходит к выполнению инструкции следующей за циклом. Таким образом, интерпретатор снова и снова выполняет код расположенный в теле цикла, пока условие остаётся истинным:

Var i = 0; while (i < 3) { // Выполнять код, пока значение переменной i меньше 3 alert("i: " + i); i++; // Увеличиваем значение переменной i }

Цикл do-while

Синтаксис цикла do-while:

Цикл do-while похож на цикл while , за исключением того, что проверка условия выполнения цикла производится после первой итерации, а не перед ней, и завершается цикл точкой с запятой. Так как условие проверяется после итерации, код в теле цикла do-while всегда выполняется минимум один раз:

Var count = 0; do { document.write(count + " "); count++; } while(count < 5); Попробовать »

Данный цикл может быть полезен, когда код в теле цикла должен быть выполнен хотя бы один раз, независимо от условия выполнения.

Цикл for

Синтаксис цикла for:

В цикле for располагаются три выражения, разделяемые точкой с запятой. Эти три выражения имеют следующий порядок выполнения:

  • Первое выражение всегда вычисляется только один раз - перед первой итерацией. Поэтому обычно в качестве первого выражения выступает определение переменной, которая используется в условии выполнения цикла в качестве счётчика.
  • Второе выражение определяет условие выполнения цикла. Оно вычисляется перед каждой итерацией и определяет, будет ли выполняться тело цикла. Если результатом вычисления выражения является истинное значение, программный код в теле цикла выполняется. Если возвращается ложное значение, выполнение цикла завершается и управление переходит к следующей после цикла инструкции. Если при первой проверке условия, оно оказывается ложным, код в теле цикла не выполнится ни разу.
  • После каждой итерации вычисляется третье выражение. Обычно его используют для изменения значения переменной, которая используется в проверке условия выполнения цикла.
  • Пример цикла for:

    For (var count = 0; count < 5; count++) document.write(count + " "); Попробовать »

    Как видно из примера, цикл for в отличие от других циклов позволяет сгруппировать связанный с циклом код в одном месте.

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

    Var i = 0; for (; i < 4; i++) ... var i = 0; for (; i < 4;) ... for (var i = 1; /* нет условия */ ; i++) ... // Это эквивалентно следующему коду for (var i = 1; true; i++) ...

    Вместо одного выражения можно указать несколько выражений, разделяя их оператором запятая.

    // не выполнится, так как в проверке условия последнее выражение false for (i = 1; i < 4, false; i++) ... for (var i = 1, j = 5; i , который позволяет выбрать несколько элементов). Цикл for объявляет переменную i и задаёт ей значение 0. Также он проверяет, что i меньше количества элементов в элементе , выполняет оператор if и увеличивает i на один после каждого прохода цикла.

    Выберите некоторые жанры музыки, а затем нажмите на кнопку ниже: R&B Jazz Blues New Age Classical Opera

    function 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", function(){ alert("Выбрано элементов: " + howMany(document.selectForm.musicTypes)) });

    Цикл 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) { выражения }

    Пример

    Следующая функция берёт своим аргументом объект и его имя. Затем проходит по всем свойствам объекта и возвращает строку, которая содержит имена свойств и их значения.

    Function dump_props(obj, obj_name) { var result = ""; for (var i in obj) { result += obj_name + "." + i + " = " + obj[i] + "
    "; } result += ""; 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}`); } // model = AUDI A8 // year = 2019 // color = brown

    Массивы

    Хотя, очень заманчиво использовать for...in как способ пройтись по всем элементам Array , этот оператор возвращает имя свойств определённых пользователем помимо числовых индексов. Таким образом лучше использовать стандартный for для числовых индексов при взаимодействии с массивами, поскольку оператор for...in проходит по определённым пользователем свойствам в дополнение к элементам массива, если вы изменяете массив, например, добавляете свойства и методы.

    For (variable of object ) { выражения }

    Следующий пример показывает разницу между циклами for...of и for...in . Тогда как for...in проходит по именам свойств, for...of проходит по значениям свойств:

    Let arr = ; arr.foo = "hello"; for (let i in arr) { console.log(i); // выводит "0", "1", "2", "foo" } for (let i of arr) { console.log(i); // выводит "3", "5", "7" }

    Последнее обновление: 08.04.2018

    Циклы позволяют в зависимости от определенных условий выполнять некоторое действие множество раз. В JavaScript имеются следующие виды циклов:

      for..in

      for..of

      while

      do..while

    Цикл for

    Цикл for имеет следующее формальное определение:

    For ([инициализация счетчика]; [условие]; [изменение счетчика]){ // действия }

    Например, используем цикл for для перебора элементов массива:

    Var people = ["Tom", "Alice", "Bob", "Sam"]; for(var i = 0; i= 0; i--){ console.log(people[i]); }

    В данном случае массив выводится с конца, а перебор массива начинается с i = 3 до i = 0.

    for..in

    Цикл for..in предназначен для перебора массивов и объектов. Его формальное определение:

    For (индекс in массив) { // действия }

    Например, переберем элементы массива:

    Var people = ["Tom", "Alice", "Bob", "Sam"]; for(var index in people){ console.log(people); }

    Цикл for...of

    Цикл for...of похож на цикл for...in и предназначен для перебора коллекций, например, массивов:

    Let users = ["Tom", "Bob", "Sam"]; for(let val of users) console.log(val);

    Текущий перебираемый элемент коллекции помещается в переменную val, значение которой затем выводится на консоль.

    Цикл while

    Цикл while выполняется до тех пор, пока некоторое условие истинно. Его формальное определение:

    While(условие){ // действия }

    Опять же выведем с помощью while элементы массива:

    Var people = ["Tom", "Alice", "Bob", "Sam"]; var index = 0; while(index < people.length){ console.log(people); index++; }

    Цикл while здесь будет выполняться, пока значение index не станет равным длине массива.

    do..while

    В цикле do сначала выполняется код цикла, а потом происходит проверка условия в инструкции while. И пока это условие истинно, цикл повторяется. Например:

    Var x = 1; do{ console.log(x * x); x++; }while(x < 10)

    Здесь код цикла сработает 9 раз, пока x не станет равным 10. При этом цикл do гарантирует хотя бы однократное выполнение действий, даже если условие в инструкции while не будет истинно.

    Операторы continue и break

    Иногда бывает необходимо выйти из цикла до его завершения. В этом случае мы можем воспользоваться оператором break :

    < array.length; i++) { if (array[i] > 10) break; document.write(array[i] + "
    "); }

    Данный цикл перебирает все элементы массива, однако последние четыре элемента не будут выведены в браузере, поскольку поверка if (array[i] > 10) прервет выполнение цикла с помощью оператора break, когда перебор массива дойдет до элемента 12.

    Если нам надо просто пропустить итерацию, но не выходить из цикла, мы можем применять оператор continue :

    Var array = [ 1, 2, 3, 4, 5, 12, 17, 6, 7 ]; for (var i = 0; i < array.length; i++) { if (array[i] > 10) continue; document.write(array[i] + "
    "); }

    В этом случае, если программа встретит в массиве число, больше 10, то это число не будет выводиться в браузере.

    Очень часто нужно, чтобы определённая часть программы выполнялась много раз. Разумеется, можно просто сделать так: скопировать-вставить и так нужное число раз. Однако, это абсурдно, особенно, если действие надо выполнять, например, 1000 раз. Поэтому существуют так называемые циклы , которую присутствуют в большинстве языков программирования. И о них я Вам и расскажу.

    Содержит определённый код, который прокручивается многократно. Существует несколько видов циклов: for , while и do-while .

    Начнём с самого первого цикла (и самого популярного) - цикла for . Общий вид этого цикла таков:

    For (переменная_итерации = начальное_значение; условие; действие_после_каждой_итерации) {
    //код программы
    }

    Давайте прокомментирую то, что здесь написано. Вначале идёт - переменная итерации . Это обычное имя переменной для итерации. Дальше идёт начальное_значение . Собственно, название говорит само за себя. Дальше идёт условие, при выполнении которого (то есть возвращается true ) цикл запускается ещё один раз, и, наконец, действие, которое выполняется после каждой итерации. Как правило, это изменение переменной для итерации.

    Давайте с Вами напишем простой скрипт, который будет выводить количество итераций цикла:

    For (i = 0; i < 100; i++)
    document.write(i + " ");

    Здесь мы задали переменную для итерации (называется i ), которой присвоили значение 0 . Дальше проверяется условие: i < 100 . Если оно выполняется, то выполняется одна итерация цикла. После выполнения каждой итерации происходит i++ (то есть увеличение переменной i на 1 ). Снова проверяется условие, и если оно истинно, то выполняется ещё одна итерация. И так до тех пор, пока условие i < 100 не станет ложным. Очевидно, что оно будет ложно лишь через 100 итераций. Таким образом, данный цикл будет выполняться 100 раз, что мы можем увидеть, если запустим этот скрипт. И ещё кое-что. Так как у нас здесь выполняется всего один оператор (document.write() ), то наличие фигурных скобок необязательно. Если у Вас 2 и более операторов крутятся в цикле, то тогда необходимо их поставить.

    Теперь поговорим о второй разновидности циклов в JavaScript - while . В принципе, цикл очень похож на for (хотя все циклы похожи). Но здесь общий вид другой:

    While (условие) {
    //код программы
    }

    Как видите, здесь нет ни переменной для итерации, ни каких-либо действий после итерации. Отсюда следует вывод: чтобы выйти из цикла необходимо в самом цикле сделать так, чтобы "условие " стало ложным. Если это не сделать, то произойдёт зацикливание, а, следовательно, Ваш скрипт повиснет.

    Давайте реализуем такую же задачу, как и раньше, но используя цикл while .

    Var i = 0;
    while (i < 100) {
    i++;
    document.write(i + " ");
    }

    Перед началом цикла мы создали переменную i , которой присвоили начальное значение. Затем перед запуском цикла проверяется условие, и если оно истинно, то запускается итерация цикла, в которой мы увеличиваем переменную для итерации (иначе произойдёт зацикливание). И выводим эту переменную.

    И, наконец, последний вид циклов в JavaScript - цикл do-while . Синтаксис такой:

    Do {
    //код программы
    } while (условие)

    Очень похож на цикл while , однако, здесь есть всего одно, но очень принципиальное отличие. Если цикл while сначала проверяет условие, а потом уже выполняет или нет итерацию. То цикл do-while сначала именно выполняет итерацию, и только потом проверяет условие. И если оно ложно, то выходит из цикла. Другими словами, независимо от условия данный цикл гарантированно выполнится хотя бы 1 раз. Думаю, что данный код будет излишним, но всё же.

    Var i = 0;
    do {
    i++;
    document.write(i + " ");
    } while (i < 100)

    Пояснять код не буду, уверен, Вы из без меня с ним разберётесь. Поэтому я лучше перейду к двум интересным операторам: break и continue .

    Начнём с break . Данный оператор позволяет досрочно выскочить из цикла. Давайте с Вами напишем такой код:

    For (i = 0; i < 100; i++) {
    if (i == 50) break;
    document.write(i + " ");
    }

    Вы можете запустить этот скрипт и обнаружите, что вывелись только числа до 49 , так как при i = 50 цикл прервался, благодаря оператору break .

    Теперь рассказываю об операторе continue . Данный оператор позволяет перейти к следующей итерации цикла. Чтобы не расписывать здесь много, лучше сразу покажу пример:

    For (i = 0; i < 100; i++) {
    if (i == 50) continue;
    document.write(i + " ");
    }

    Если Вы запустите этот скрипт, то увидите, что не хватает числа 50 . Это произошло потому, что при i = 50 , мы переходим к следующей итерации цикла, перед которой i увеличивается на 1 и становится равным 51-му .

    Вот, вроде бы, и всё, что хотелось написать о циклах JavaScript . Надеюсь, Вам всё стало ясно. Можете также придумать себе какую-нибудь задачу и решить её. Это будет великолепной тренировкой.

    |

    Поскольку while и do…while основаны на условиях, они выполняются, когда заданный оператор оценивается как true. Оператор for также основан на условиях, но он предоставляет дополнительные функции, такие как счетчик цикла, позволяющий заранее установить количество итераций цикла.

    Данный мануал научит вас использовать циклы for, for…of и for…in, которые являются неотъемлемыми элементами программирования в JavaScript.

    Циклы for

    Цикл for может использовать до трех опциональных выражений для повторного выполнения блока кода.

    Рассмотрим синтаксис цикла.

    for (инициализация; условие; финальное выражение) {
    // код, который нужно выполнить
    }

    • Инициализация (если указано) запускает счетчик и объявляет переменные.
    • Далее обрабатывается условие. Если оно истинно, программа выполнит последующий код; если оно ложно, цикл прервется.
    • Затем обрабатывается код, который нужно выполнить.
    • Если указано финальное выражение, оно обновляется, после чего цикл возвращается к обработке условия.

    Чтобы понять, как это работает, рассмотрим базовый пример.


    for (let i = 0; i < 4; i++) {
    // Print each iteration to the console
    console.log(i);
    }

    Если запустить этот код, вы получите такой результат:

    0
    1
    2
    3

    В приведенном выше примере цикл for начинается с переменной let i = 0, которая запустит цикл со значения 0. В цикле задано условие i < 4, а это означает, что до тех пор, пока значение i меньше 4, цикл будет продолжать работу. Финальное выражение i++ определяет счетчик для каждой итерации цикла. console.log(i) выводит числа, начиная с 0, и останавливается, как только i равняется 4.

    Без цикла код, выполняющий те же действия, был бы таким:

    // Set initial variable to 0
    let i = 0;
    // Manually increment variable by 1 four times
    console.log(i++);
    console.log(i++);
    console.log(i++);
    console.log(i++);

    Без цикла блок кода состоит из большего количества строк. Чтобы увеличить количество чисел, пришлось бы внести в код еще больше строк.

    Давайте рассмотрим каждое выражение в цикле.

    Инициализация

    Первое выражение в цикле – инициализация.

    Оно объявляет переменную i с помощью ключевого слова let (также можно использовать ключевое слово var) и присваивет ей значение 0. Вы можете использовать в циклах любые имена переменных, но переменная i ассоциируется со словом «итерация» (iteration) и не перегружает код.

    Условие

    Как и циклы while и do…while, циклы for обычно имеют условие. В данном примере это:

    Это значит, что выражение оценивается как истинное, пока значение i меньше 4.

    Финальное выражение

    Это выражение, которое выполняется в конце каждого цикла. Чаще всего оно используется для увеличения или уменьшения значения переменной, но его можно использовать и для других целей.

    В данном примере цикл увеличивает переменную на единицу. Выражение i++ делает то же самое, что и i = i + 1.

    В отличие от начала и условия, финальное выражение не заканчивается точкой с запятой.

    Тело цикла

    Теперь вы знаете все компоненты цикла for. Взглянем на код еще раз.

    // Initialize a for statement with 5 iterations
    for (let i = 0; i < 4; i++) {
    console.log(i);
    }

    Первое выражение задает исходное значение переменной (0), второе определяет условие (цикл выполняется, пока i меньше 4), а третье – задает шаг каждой итерации (в данном случае значение будет увеличиваться на 1).

    Консоль будет выводить значения: 0, 1, 2 и 3. Затем цикл прервется.

    Опциональные выражения

    Все тир выражения цикла for опциональны. К примеру, вы можете написать такой же цикл for, но пропустить инициализацию и инициализировать переменную вне цикла.


    let i = 0;
    // Initialize the loop
    for (; i < 4; i++) {
    console.log(i);
    }
    0
    1
    2
    3

    В данном случае первый символ точки с запятой указывает, что начало пропущено.

    Примечание: Даже если вы не используете одно из выражений, необходимо ставить точку с запятой, иначе цикл будет интерпретирован неверно.

    Также для примера можно убрать из цикла условие. Чтобы цикл остановился после того, как значение переменной станет больше 3, используйте if и break.

    // Declare variable outside the loop
    let i = 0;
    // Omit initialization and condition
    for (; ; i++) {
    if (i > 3) {
    break;
    }
    console.log(i);
    }
    0
    1
    2
    3

    Важно! В циклах без условия обязательно нужно использовать оператор break. Иначе цикл не сможет прерваться (такие циклы называются бесконечными) и станет причиной сбоя браузера.

    Также из цикла можно удалить финальное выражение. Шаг можно указать в конце кода цикла. При этом нужно обязательно оставить в скобках оба символа «;», иначе цикл не будет работать.

    // Declare variable outside the loop
    let i = 0;
    // Omit all statements
    for (; ;) {
    if (i > 3) {
    break;
    }
    console.log(i);
    i++;
    }
    0
    1
    2
    3

    Как видите, выражения цикла позволяют получить наиболее сжатый и удобочитаемый код.

    Изменение массивов

    Цикл for можно использовать для изменения массивов.

    В следующем примере показано, как создать пустой массив и заполнить его переменными с помощью счетчика цикла. Создайте файл modifyArray.js и добавьте в него такой код:

    // Initialize empty array
    let arrayExample = ;
    // Initialize loop to run 3 times
    for (let i = 0; i < 3; i++) {
    // Update array with variable value
    arrayExample.push(i);
    console.log(arrayExample);
    }

    Запустите программу. Она выведет:

    [ 0 ]
    [ 0, 1 ]
    [ 0, 1, 2 ]

    Заданный цикл выполняется до тех пор, пока i < 3 перестанет быть истинным. Массив arrayExample выводится в консоль в конце каждой итерации. Так вы можете увидеть, как массив пополняется новыми значениями.

    Длина массива

    Иногда цикл должен выполниться несколько раз, но определить необходимое количество итераций сложно. Вместо того чтобы объявлять количество итераций, как это было в предыдущих примерах, можно использовать свойство length, чтобы цикл выполнялся столько раз, сколько элементов в массиве.

    // Declare array with 3 items
    let fish = [ "flounder", "salmon", "pike" ];
    // Initalize for loop to run for the total length of an array
    for (let i = 0; i < fish.length; i++) {
    // Print each item to the console
    console.log(fish[i]);
    }

    Такая программа выдаст результат:

    flounder
    salmon
    pike

    Этот цикл перебирает каждый индекс массива с помощью fish[i]. Это приводит к динамическому обновлению индекса при каждой итерации.