|
@@ -0,0 +1,384 @@
|
|
|
+/* <body>
|
|
|
+ <div>
|
|
|
+ <span>Enter a data please:</span><br/>
|
|
|
+ <input type='text' id='name'>
|
|
|
+ <input type='text' id='surname'>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <button id='ok'>OK</button>
|
|
|
+ <button id='cancel'>Cancel</button>
|
|
|
+ </div>
|
|
|
+ </body>
|
|
|
+*/
|
|
|
+
|
|
|
+// Сделайте декларативную JSON-структуру для тэгов выше, в которой:
|
|
|
+// каждый тэг будет объектом
|
|
|
+// имя тэга будет полем tagName
|
|
|
+// вложенные тэги будут в поле subTags
|
|
|
+// текст в тэге будет в поле text
|
|
|
+// набор аттрибутов тэга будет в поле attrs.
|
|
|
+
|
|
|
+// Выведите значения текста во второй кнопке, используя . и [].
|
|
|
+// Выведите значение атрибута id во втором input, используя . и [].
|
|
|
+
|
|
|
+let body = {
|
|
|
+ tagName: 'body',
|
|
|
+ subTags: {
|
|
|
+ div1: {
|
|
|
+ tagName: 'div',
|
|
|
+ subTags: {
|
|
|
+ span: {
|
|
|
+ tagName: 'span',
|
|
|
+ text: 'Enter a data please:',
|
|
|
+ },
|
|
|
+ br: {
|
|
|
+ tagName: 'br',
|
|
|
+ },
|
|
|
+ input: {
|
|
|
+ tagName: 'input',
|
|
|
+ attrs: {
|
|
|
+ type: 'text',
|
|
|
+ id: 'name',
|
|
|
+ },
|
|
|
+ },
|
|
|
+ input: {
|
|
|
+ tagName: 'input',
|
|
|
+ attrs: {
|
|
|
+ type: 'text',
|
|
|
+ id: 'surname',
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ div2: {
|
|
|
+ tagName: 'div',
|
|
|
+ subTags: {
|
|
|
+ button: {
|
|
|
+ tagName: 'button',
|
|
|
+ attrs: {
|
|
|
+ id: 'ok',
|
|
|
+ },
|
|
|
+ text: 'OK',
|
|
|
+ },
|
|
|
+ button: {
|
|
|
+ tagName: 'button',
|
|
|
+ attrs: {
|
|
|
+ id: 'cancel',
|
|
|
+ },
|
|
|
+ text: 'Cancel',
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+}
|
|
|
+
|
|
|
+console.log(body.subTags.div2.subTags.button.text);
|
|
|
+console.log(body['subTags']['div2']['subTags']['button']['text']);
|
|
|
+
|
|
|
+console.log(body.subTags.div1.subTags.input.attrs.id);
|
|
|
+console.log(body['subTags']['div1']['subTags']['input']['attrs']['id']);
|
|
|
+
|
|
|
+// P.S. Не уверен, правильно ли менять названия тегов дива на див1 и див2, но так работает)
|
|
|
+
|
|
|
+// declarative fields
|
|
|
+
|
|
|
+// Как известно, элемент массива и объекта может быть любого типа данных JS, т. е. в коде может быть любое выражение,
|
|
|
+// которое вычисляется в то или иное значение типа данных.
|
|
|
+// А значит, мы можем применять функции для ввода данных типа confirm или prompt:
|
|
|
+
|
|
|
+// var text = "Enter a number";
|
|
|
+// var arr3 = [+prompt(text), +prompt(text), +prompt(text)]; //вводим числа.
|
|
|
+
|
|
|
+// Организуйте таким способом заполнение полей в объектах:
|
|
|
+
|
|
|
+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,
|
|
|
+}
|
|
|
+
|
|
|
+// Например:
|
|
|
+
|
|
|
+// var person = {
|
|
|
+// name: prompt("Enter a name"),
|
|
|
+// surname: prompt("Enter a surname"),
|
|
|
+// }
|
|
|
+
|
|
|
+// Используйте приведение к числу, prompt и confirm в зависимости от типов данных.
|
|
|
+
|
|
|
+var notebook = {
|
|
|
+ brand: prompt('Enter the laptop brand:'),
|
|
|
+ type: prompt('Enter the type of laptop:'),
|
|
|
+ model: prompt('Enter the model of the laptop:'),
|
|
|
+ ram: +prompt('Enter the value of RAM:'),
|
|
|
+ size: prompt('Enter the size of screen of laptop:'),
|
|
|
+ weight: +prompt('Enter the weight of laptop:'),
|
|
|
+ resolution: {
|
|
|
+ width: +prompt('Enter the width of the screen:'),
|
|
|
+ height: +prompt('Enter the height of the screen:'),
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+var phone = {
|
|
|
+ brand: prompt('Enter the cell phone brand:'),
|
|
|
+ model: prompt('Enter the cell phone model:'),
|
|
|
+ ram: +prompt('Enter the value of ram:'),
|
|
|
+ color: prompt('Enter the color of the cell phone: '),
|
|
|
+};
|
|
|
+
|
|
|
+var person = {
|
|
|
+ name: prompt('Enter the name of the person:'),
|
|
|
+ surname: prompt('Enter the surname of the person:'),
|
|
|
+ married: window.confirm('Is the person married?'),
|
|
|
+}
|
|
|
+
|
|
|
+// object links
|
|
|
+
|
|
|
+// Добавьте персоне гаджеты, используя новые поля smartphone и laptop в объекте персоны
|
|
|
+// Добавьте владельца в гаджеты, используя новое поле owner в объектах телефона и ноутбука.
|
|
|
+// обратите внимание на цикличность ссылок в объектах, если вы все сделали правильно, то
|
|
|
+
|
|
|
+// person.smartphone.owner.laptop.owner.smartphone == person.smartphone
|
|
|
+
|
|
|
+var notebook = {
|
|
|
+ brand: prompt('Enter the laptop brand:'),
|
|
|
+ type: prompt('Enter the type of laptop:'),
|
|
|
+ model: prompt('Enter the model of the laptop:'),
|
|
|
+ ram: +prompt('Enter the value of RAM:'),
|
|
|
+ size: prompt('Enter the size of screen of laptop:'),
|
|
|
+ weight: +prompt('Enter the weight of laptop:'),
|
|
|
+ resolution: {
|
|
|
+ width: +prompt('Enter the width of the screen:'),
|
|
|
+ height: +prompt('Enter the height of the screen:'),
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+var phone = {
|
|
|
+ brand: prompt('Enter the cell phone brand:'),
|
|
|
+ model: prompt('Enter the cell phone model:'),
|
|
|
+ ram: +prompt('Enter the value of ram:'),
|
|
|
+ color: prompt('Enter the color of the cell phone: '),
|
|
|
+};
|
|
|
+
|
|
|
+var person = {
|
|
|
+ name: prompt('Enter the name of the person:'),
|
|
|
+ surname: prompt('Enter the surname of the person:'),
|
|
|
+ married: window.confirm('Is the person married?'),
|
|
|
+}
|
|
|
+
|
|
|
+notebook.owner = person,
|
|
|
+ phone.owner = person,
|
|
|
+ person.smartphone = phone,
|
|
|
+ person.laptop = notebook,
|
|
|
+
|
|
|
+ alert(person.smartphone.owner.laptop.owner.smartphone == person.smartphone);
|
|
|
+
|
|
|
+// imperative array fill 3
|
|
|
+
|
|
|
+// Создайте пустой массив и добавьте в него три элемента, введенные пользователем (prompt),
|
|
|
+// используя императивный подход (несколько операторов подряд)
|
|
|
+
|
|
|
+var arr = []
|
|
|
+arr[0] = prompt('Enter the element #1:');
|
|
|
+arr[1] = prompt('Enter the element #2:');
|
|
|
+arr[2] = prompt('Enter the element #3:');
|
|
|
+console.log(arr);
|
|
|
+
|
|
|
+// while confirm
|
|
|
+
|
|
|
+// Сделайте цикл с confirm, который продолжается по Отмена и заканчивается по ОК.
|
|
|
+
|
|
|
+var fact = false;
|
|
|
+while (fact == false) {
|
|
|
+ fact = window.confirm('putin lox?');
|
|
|
+}
|
|
|
+
|
|
|
+// array fill
|
|
|
+
|
|
|
+// Создайте пустой массив и добавляйте в него элементы, пока пользователь не нажмет Отмена в очередном prompt.
|
|
|
+// Используйте push для удобства: push
|
|
|
+
|
|
|
+var arr = [];
|
|
|
+var add = '';
|
|
|
+while (add != null) {
|
|
|
+ add = prompt('Write anything here...');
|
|
|
+ arr.push(add);
|
|
|
+}
|
|
|
+console.log(arr);
|
|
|
+
|
|
|
+// array fill nopush
|
|
|
+
|
|
|
+// Сделайте предыдущее задание, не используя push, а обращаясь к элементам по индексу.
|
|
|
+
|
|
|
+var arr = [];
|
|
|
+var add = '';
|
|
|
+while (add != null) {
|
|
|
+ add = prompt('Write anything here...');
|
|
|
+ arr[arr.length] = add;
|
|
|
+}
|
|
|
+console.log(arr);
|
|
|
+
|
|
|
+// infinite probability
|
|
|
+
|
|
|
+// Создайте бесконечный цикл, который прерывается с помощью конструкции break, когда Math.random() > 0.9.
|
|
|
+// Код должен подсчитывать количество итераций и вывести это число с помощью alert.
|
|
|
+
|
|
|
+var counter = 0;
|
|
|
+while (Math.random() < 0.9) {
|
|
|
+ counter++;
|
|
|
+ if (Math.random() > 0.9) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+}
|
|
|
+alert(counter);
|
|
|
+
|
|
|
+// empty loop
|
|
|
+
|
|
|
+// Сделайте цикл с prompt, который прерывается по нажатию OK и продолжается по нажатию "Отмена" c пустым телом цикла.
|
|
|
+
|
|
|
+for (var god = prompt('Do you believe in god?'); god == null; god = prompt('Do you believe in god?')) { }
|
|
|
+
|
|
|
+// progression sum
|
|
|
+
|
|
|
+// Подсчитать сумму арифметической прогрессии от 1 до N c шагом 3 (1,4,7....) используя цикл for.
|
|
|
+
|
|
|
+var sum;
|
|
|
+for (let i = 1, j = i + 3, n = +prompt('Enter the N:'); j < n; i = i + 3, j = i + 3, sum = i + j) { }
|
|
|
+alert(sum);
|
|
|
+
|
|
|
+// chess one line
|
|
|
+
|
|
|
+// Сформировать строку " # # # # # " с помощью цикла for. Длина строки может быть четной и нечетной, и указывается в одном месте в коде.
|
|
|
+
|
|
|
+var str;
|
|
|
+for (str = [''], n = +prompt('Enter the length of the string:'); str.length < (n / 2); str.push('#')) { }
|
|
|
+console.log(str.join(' '))
|
|
|
+
|
|
|
+// numbers
|
|
|
+
|
|
|
+// Сформировать строку c помощью вложенных циклов. Для перевода строки используйте \n.
|
|
|
+
|
|
|
+var arr1 = [];
|
|
|
+var arr2 = [0]
|
|
|
+for (let m = 0; m < 10; m++) {
|
|
|
+ for (arr2, n = 0; arr2.length < 10; arr2.push(n + 1), n++) { }
|
|
|
+ arr1 += ((arr2.join('')) + '\n');
|
|
|
+}
|
|
|
+console.log(arr1)
|
|
|
+
|
|
|
+// chess
|
|
|
+
|
|
|
+// Сформируйте строку с шахматной доской из вложенных циклов. Для перевода строки используйте \n. Код должен поддерживать легкое изменение размеров доски.
|
|
|
+
|
|
|
+// .#.#.#.#.#.#
|
|
|
+// #.#.#.#.#.#.
|
|
|
+// .#.#.#.#.#.#
|
|
|
+// #.#.#.#.#.#.
|
|
|
+// .#.#.#.#.#.#
|
|
|
+// #.#.#.#.#.#.
|
|
|
+// .#.#.#.#.#.#
|
|
|
+// #.#.#.#.#.#.
|
|
|
+// .#.#.#.#.#.#
|
|
|
+// #.#.#.#.#.#.
|
|
|
+
|
|
|
+var chessBoard = "";
|
|
|
+let rows = +prompt('Enter the amount of rows:');
|
|
|
+let cols = +prompt('Enter the amount of columns:');
|
|
|
+for (var j = 1; j <= cols; j += 1) {
|
|
|
+ if (j % 2 != 0) {
|
|
|
+ for (var i = 1; i <= rows; i += 1) {
|
|
|
+ if ((i % (cols + 1)) == 0) {
|
|
|
+ chessBoard += "\n";
|
|
|
+ } else if (i % 2 != 0) {
|
|
|
+ chessBoard += "#";
|
|
|
+ } else {
|
|
|
+ chessBoard += ".";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ chessBoard += "\n";
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ for (var i = 1; i <= rows; i += 1) {
|
|
|
+ if ((i % (cols + 1)) == 0) {
|
|
|
+ chessBoard += "\n";
|
|
|
+ } else if (i % 2 != 0) {
|
|
|
+ chessBoard += ".";
|
|
|
+ } else {
|
|
|
+ chessBoard += "#";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ chessBoard += "\n";
|
|
|
+ }
|
|
|
+}
|
|
|
+console.log(chessBoard);
|
|
|
+
|
|
|
+// cubes
|
|
|
+
|
|
|
+// Сформируйте массив из N элементов, содержащий в себе кубы индексов, т. е:
|
|
|
+
|
|
|
+// [0,1,8,27,64...]
|
|
|
+
|
|
|
+var cubes = [];
|
|
|
+var n = prompt('Enter the amount of items:')
|
|
|
+for (i = 0; i < n; i++) {
|
|
|
+ cubes.push(Math.pow(i, 3));
|
|
|
+}
|
|
|
+console.log(cubes);
|
|
|
+
|
|
|
+// multiply table
|
|
|
+
|
|
|
+// C помощью вложенного цикла сформируйте массив массивов "таблица умножения". Для инициализации вложенных массивов используйте
|
|
|
+
|
|
|
+// arr[i] = [] //в i-тый элемент массива заносится новый пустой массив
|
|
|
+// arr[5][6] должен быть равен, соответственно, 30, arr[7][2] == 14 и так далее.
|
|
|
+
|
|
|
+var m = [];
|
|
|
+for (var i = 0; i < 10; i++) {
|
|
|
+ var n = [];
|
|
|
+ for (var j = 0; j < 10; j++) {
|
|
|
+ n.push(j * i);
|
|
|
+ }
|
|
|
+ m.push(n);
|
|
|
+}
|
|
|
+console.log(m[1][1]);
|
|
|
+
|
|
|
+// matrix to html table
|
|
|
+
|
|
|
+// Сделайте вложенный цикл, который формирует HTML-таблицу в переменной строкового типа из любого двумерного массива.
|
|
|
+// Т. е. если в нём использовать результат работы предыдущего задания, то получится таблица умножения в HTML
|
|
|
+
|
|
|
+var table = "<table border='1'>";
|
|
|
+var m = [];
|
|
|
+for (var i = 0; i < 10; i++) {
|
|
|
+ var n = [];
|
|
|
+ table += `<tr>`;
|
|
|
+ for (var j = 0; j < 10; j++) {
|
|
|
+ n.push(j * i);
|
|
|
+ table += `<td>${i}*${j}=${i*j}</td>`;
|
|
|
+ }
|
|
|
+ table += `</tr>`
|
|
|
+ m.push(n);
|
|
|
+}
|
|
|
+table += "</table>";
|
|
|
+
|
|
|
+document.write(table);
|