# ДЗ: Вложенные декларативные структуры и код в них. Отображение циклических и древовидных структур. Циклы.
## 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**.
## 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": "<текст, который ввел пользователь в поле ввода