Всем привет, надеюсь у вас все хорошо. Мы почти закончили с 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 в массиве верхнего уровня.
—
Аааа, давайте назовем это там, пока это не вышло из-под контроля! Спасибо, ребята, что заглянули и увидимся в следующий раз!