Всем привет, надеюсь у вас все хорошо. Мы почти закончили с JavaScript Loops, мы приближаемся к главе 89, FreeCodeCamp не мешкает! Спасибо им за уроки.

JavaScript Do..While Loops

Другой тип цикла, с которым мы можем работать, — это цикл do..while. условие и утверждение вокруг. Таким образом, если цикл while говорит: «пока это происходит (условие), сделайте это (оператор)» и do Цикл while говорит: «сделать это (оператор)… пока это (условие) происходит»

Таким образом, цикл выполняет часть do, оператор, несмотря ни на что, а затем повторяет условие (i ‹ 5) до тех пор, пока оно остается истинным. В этом примере он добавит значения в массив в соответствии с частью цикла do и даст нам ответ >[5], так как несмотря ни на что он прошел один успешный цикл. Если бы это было наоборот, это выглядело бы так:

Единственным отличием здесь является порядок кода, как указано выше, но в этом случае обычного цикла while здесь условие передается сначала , поэтому i == 5 и не меньше (что, в свою очередь, делает условие i ‹ 5 ложным) , поэтому массив не получает значений и остается пустым как [].

Таким образом, цикл do..while гарантирует, что условие будет передано через цикл по крайней мере один раз.

Замена циклов рекурсией

Рекурсия в JavaScript – это понятие, согласно которому функция может быть выражена сама по себе. Давайте полностью разберемся с термином:

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

- Википедия.

Давайте подумаем о следующей задаче: умножьте первые (n) элементы массива, чтобы получить произведение этих элементов. В цикле это будет выглядеть так:

Однако обратите внимание, что multiply(arr, n) равносильно (или ==) следующему: multiply(arr, n - 1) * arr[n - 1].

Отсюда мы можем переписать функцию умножения с помощью рекурсии и вообще избежать использования цикла:

Итак, здесь мы видим в операторе if, что если n ‹= 0 (базовый случай), он возвращает 1. В операторе else для больших значений n функция вызывает сама себя, но с небольшим ограничением «n- 1 . Этот вызов оценивается таким же образом, как вызов multiply, пока n ‹= 0. На этом этапе выполнения все функции могут вернуться, и исходный multiply возвращает ответ.

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

Задача поиска профиля

Хорошо, давайте посмотрим на массив объектов и на то, как мы можем применить цикл for к функции, чтобы выяснить, два оператора if (см. ниже). Вот настройка:

Здесь у нас есть один объект с именем contacts, один массив верхнего уровня с 4 вложенных объекта внутри (позже каждый будет называться i), каждый из которых содержит различные key и метаданные >value и другой вложенный массив.

Затем мы задаем себе ряд вопросов, заданных FreeCodeCamp:

Функция должна проверять, является ли name firstName фактического контакта, а заданное свойство (prop) является свойством этого контакта.

Если оба истинны, то вернуть «значение» этого свойства.

Если name не соответствует ни одному контакту, вернуть "No such contact".

Если prop не соответствует ни одному допустимому свойству контакта, который соответствует name, верните "No such property".

Как эти вопросы выглядят в коде? Посмотрим-посмотрим:

Мы начинаем с цикла for в строке 31, за которым следуют два оператора if в строках 32 и 33.

Примечание. Вместо использования метода .hasOwnProperty() для проверки prop мы используем оператор in в строке 33. Это фактически говорит «если реквизит в массиве контактов с номером x..»

Это довольно логично для проработки, однако здесь есть пара новых вещей. Мы рассматриваем возможность использования цикла for внутри функции вместо написания инструкции if/else. Второй оператор if вложен в первый. Здесь также стоит отметить, что [i] отвечает за индекс object в массиве верхнего уровня.

Аааа, давайте назовем это там, пока это не вышло из-под контроля! Спасибо, ребята, что заглянули и увидимся в следующий раз!