# ДЗ: Вложенные декларативные структуры и код в них. Отображение циклических и древовидных структур. Циклы. ## html tree ```html
Enter a data please:
``` Сделайте декларативную JSON-структуру для тэгов выше, в которой: - каждый тэг будет объектом - имя тэга будет полем `tagName` - вложенные тэги будут в поле `subTags` - текст в тэге будет в поле `text` - набор аттрибутов тэга будет в поле `attrs`. Например для обычной таблицы 2x2 это будет выглядеть следующим образом: ```html
1x1 1x2
2x1 2x2
``` ```javascript var table = { tagName: 'table', attrs: { border: "1", }, subTags: [ { tagName: 'tr', subTags: [ { tagName: "td", text: "1x1", }, { tagName: "td", text: "1x2", }, ] }, { tagName: 'tr', subTags: [ { tagName: "td", text: "2x1", }, { tagName: "td", text: "2x2", }, ] } ] } ``` Выведите значения текста во второй кнопке, используя `.` и `[]`. Выведите значение атрибута `id` во втором `input`, используя `.` и `[]`. ## declarative fields Как известно, элемент массива и объекта может быть любого типа данных **JS**, т. е. в коде может быть любое выражение, которое вычисляется в то или иное значение типа данных. А значит, мы можем применять функции для ввода данных типа `confirm` или `prompt`: ```javascript var text = "Enter a number"; var arr3 = [+prompt(text), +prompt(text), +prompt(text)]; //вводим числа. ``` Организуйте таким способом заполнение полей в объектах: ```javascript var notebook = { brand: "HP", type: "440 G4", model: "Y7Z75EA", ram: 4, size: "14", weight: 1.8, resolution: { width: 1920, height: 1080, }, }; var phone = { brand: "meizu", model: "m2", ram: 2, color: "black", }; var person = { name: "Donald", surname: "Trump", married: true, } ``` Например: ```javascript var person = { name: prompt("Enter a name"), surname: prompt("Enter a surname"), } ``` Используйте приведение к числу, `prompt` и `confirm` в зависимости от типов данных. ## object links - Добавьте персоне гаджеты, используя новые поля `smartphone` и `laptop` в объекте персоны - Добавьте владельца в гаджеты, используя новое поле `owner` в объектах телефона и ноутбука. - обратите внимание на цикличность ссылок в объектах, если вы все сделали правильно, то ```javascript person.smartphone.owner.laptop.owner.smartphone == person.smartphone ``` ## imperative array fill 3 Создайте пустой массив и добавьте в него три элемента, введенные пользователем (`prompt`), используя императивный подход (несколько операторов подряд) ## while confirm Сделайте цикл с `confirm`, который продолжается по **Отмена** и заканчивается по **ОК**. ## array fill Создайте пустой массив и добавляйте в него элементы, пока пользователь не нажмет `Отмена` в очередном `prompt`. Используйте `push` для удобства: [push](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/push) ## array fill nopush Сделайте предыдущее задание, не используя `push`, а обращаясь к элементам по индексу. ## infinite probability Создайте бесконечный цикл, который прерывается с помощью конструкции `break`, когда Math.random() > 0.9. Код должен подсчитывать количество итераций и вывести это число с помощью `alert`. ## empty loop Сделайте цикл с `prompt`, который прерывается по нажатию **OK** и продолжается по нажатию "**Отмена**" **c пустым телом цикла**. ## progression sum Подсчитать сумму арифметической прогрессии от 1 до N c шагом 3 (1,4,7....) используя цикл `for`. ## chess one line Сформировать строку `" # # # # # "` с помощью цикла `for`. Длина строки может быть четной и нечетной, и указывается в одном месте в коде. ## numbers Сформировать строку c помощью вложенных циклов. Для перевода строки используйте **\n**.
0123456789
0123456789
0123456789
0123456789
0123456789
0123456789
0123456789
0123456789
0123456789
0123456789
## chess Сформируйте строку с шахматной доской из вложенных циклов. Для перевода строки используйте `\n`. Код должен поддерживать легкое изменение размеров доски.
.#.#.#.#.#.#
#.#.#.#.#.#.
.#.#.#.#.#.#
#.#.#.#.#.#.
.#.#.#.#.#.#
#.#.#.#.#.#.
.#.#.#.#.#.#
#.#.#.#.#.#.
.#.#.#.#.#.#
#.#.#.#.#.#.
## cubes Сформируйте массив из N элементов, содержащий в себе кубы индексов, т. е: ```javascript [0,1,8,27,64...] ``` ## multiply table C помощью вложенного цикла сформируйте массив массивов "таблица умножения". Для инициализации вложенных массивов используйте ```javascript arr[i] = [] //в i-тый элемент массива заносится новый пустой массив ``` `arr[5][6]` должен быть равен, соответственно, 30, `arr[7][2]` == 14 и так далее. ## matrix to html table Сделайте вложенный цикл, который формирует HTML-таблицу в переменной строкового типа из любого двумерного массива. Т. е. если в нём использовать результат работы предыдущего задания, то получится таблица умножения в HTML. ## jQ person Создайте форму с полями "Фамилия", "Имя", "Возраст" и кнопкой "Сохранить". Используя jQuery при нажатии на кнопку создайте объект с этими полями. Используйте jQuery `click` и `val`. ## jQ collect Задайте массив с селекторами, например такой: ```javascript var selectors = ["#surname", "#name", "#age", "select#sex"]; ``` В цикле прочтите значения всех полей ввода из селекторов и сохраните в объект с ключами-селекторами из массива. То есть, для примера выше: ```javascript { "#surname": "<текст, который ввел пользователь в поле ввода с id=surname>", "#name": "<текст, который ввел пользователь в поле ввода с id=name>", "#age": "<текст, который ввел пользователь в поле ввода с id=age>", "select#sex": "<текст, который ввел пользователь в поле ввода