Browse Source

done one more wh js Omelchienko Hryhorii

unknown 3 years ago
parent
commit
d6f6902399
4 changed files with 306 additions and 2 deletions
  1. 3 0
      .vscode/settings.json
  2. 0 0
      html-css/css/styles.css
  3. 5 2
      html-css/index.html
  4. 298 0
      javascript/homework.js

+ 3 - 0
.vscode/settings.json

@@ -0,0 +1,3 @@
+{
+	"liveServer.settings.port": 5501
+}

javascript/hw1.js → html-css/css/styles.css


+ 5 - 2
html-css/index.html

@@ -3,8 +3,11 @@
 	<head>
 		<meta charset="UTF-8" />
 		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+		<style hre></style>
 		<title>Document-js</title>
 	</head>
-	<body></body>
-	<script src="../javascript/hw1.js" type="module"></script>
+	<body>
+		<div id="wrapper"></div>
+	</body>
+	<script src="../javascript/homework.js" type="module"></script>
 </html>

+ 298 - 0
javascript/homework.js

@@ -0,0 +1,298 @@
+//3 persons
+//Сделать три ассоциативных массива a, b, c, в каждом из которых должны быть поля name и surname.
+
+const a = new Map([
+	['name', 'yaho'],
+	['surname', 'google'],
+]);
+const b = new Map([
+	['name', 'Liza'],
+	['surname', 'Babay'],
+]);
+const c = new Map([
+	['name', 'Coconut'],
+	['surname', 'Fish'],
+]);
+
+//different fields
+//Добавьте некоторые другие поля (например age, fathername, sex (пол)) так,
+//что бы набор полей отличался у разных объектов
+
+a.set('age', 16);
+b.set('fatherName', 'Bob');
+c.set('sex', 'male');
+
+//fields check
+//Проверьте наличие необязательных полей у каждого из этих массивов.
+//Если поле найдено, выведите его с помощью alert.Проверку делайте по typeof или in в if.
+
+// if (a.has('age')) alert(`${a.get('age')} this is field`);
+// if (b.has('fatherName')) alert(`${b.get('fatherName')} this is field`);
+// if (b.has('sex')) alert(`${b.get('sex')} this is field`);
+
+//array of persons
+//Добавьте несколько ассоциативных массивов с персонами в обычный массив persons,
+//например a, b, c.Так же добавьте персону литерально({ ...}).
+//Получится обычный массив с элементами - ассоциативными массивами с персонами.
+
+const persons = [a, b, c];
+
+//loop of persons
+//Сделайте цикл, который выводит весь массив persons
+//в форме объектов console.log(persons[i])
+// for (let i = 0; i < persons.length; i++) {
+// 	console.log(persons[i]);
+// }
+
+//loop of name and surname
+//Сделайте цикл, который выводит весь массив persons, но только Имя и Фамилию каждой персоны.
+
+// for (let i = 0; i < persons.length; i++) {
+// 	const name = persons[i].get('name');
+// 	const surname = persons[i].get('surname');
+// 	console.log(name, surname);
+// }
+
+//loop of loop of values
+//Сделайте цикл, который выводит весь массив persons,
+//но только значения всех полей из объектов.Используйте вложенный цикл
+// for (let i = 0; i < persons.length; i++) {
+// 	for (let person of persons[i]) {
+// 		console.log(...person);
+// 	}
+// }
+
+//fullName
+//Сделайте цикл, которых добавляет поле fullName в каждый объект,
+//содержащий ФИО.Учтите, что поле fathername не является обязательным.
+
+// for (let i = 0; i < persons.length; i++) {
+// 	persons[i].set('fullName', i);
+// }
+
+//serialize
+//Создайте JSON-строку из persons
+// const serialize = JSON.stringify(persons.map((arr) => [...arr]));
+// console.log(jsonPersons);
+//deserialize
+//Создайте ассоциативный массив с одной персоной из JSON-строки. Добавьте её в persons
+// const deserialize = JSON.parse(serialize);
+// persons.push(new Map(deserialize[0]));
+// console.log(persons);
+
+//HTML
+//Сделайте цикл, который выводит весь массив persons, в форме HTML-таблицы.
+//Имя и Фамилия - колонки.Таблицы в HTML Пример кода:
+//Модифицируйте код так, что бы он выводил массив persons
+// const tableWrapper = document.getElementById('wrapper');
+// let stringTable = "<table border='1'>";
+// for (let i = 0; i < persons.length; i++) {
+// 	stringTable += `<tr><td>${persons[i].get('name')}</td><td>${persons[i].get(
+// 		'surname'
+// 	)}</td></tr>`;
+// }
+// stringTable += '</table>';
+// tableWrapper.innerHTML += stringTable;
+
+//HTML optional fields
+//Сделайте цикл, который выводит весь массив persons, в форме HTML-таблицы.
+//Имя и Фамилия, а так же другие поля при наличии.Колонки: поля, строки таблицы - персоны.
+// const tableWrapper = document.getElementById('wrapper');
+// let stringTable = "<table border='1'>";
+// persons[0].set('dddd', 'justForCheckDoesItWorks?');
+// for (let i = 0; i < persons.length; i++) {
+// 	stringTable += '<tr>';
+// 	for (let value of persons[i].values()) {
+// 		stringTable += `<td>${value}</td>`;
+// 	}
+// 	stringTable += '</tr>';
+// }
+// stringTable += '</table>';
+
+// tableWrapper.innerHTML += stringTable;
+
+//HTML tr color
+//Добавьте к предыдущему примеру раскраску через строчку используя другой стиль тэга tr.
+
+// const tableWrapper = document.getElementById('wrapper');
+// let stringTable = "<table border='1'>";
+// persons[0].set('dddd', 'justForCheckDoesItWorks?');
+// for (let i = 0; i < persons.length; i++) {
+// 	stringTable += `<tr style="color:green">`;
+// 	for (let value of persons[i].values()) {
+// 		stringTable += `<td>${value}</td>`;
+// 	}
+// 	stringTable += '</tr>';
+// }
+// stringTable += '</table>';
+
+// tableWrapper.innerHTML += stringTable;
+
+//HTML th optional
+//Переработайте вывод persons в HTML с поиском всех возможных колонок во всех записях, выводом
+//названий колонок в заголовок HTML - таблицы.Для решения этой задачи вначале узнайте
+//множество полей(ключей) во всех записях(они не совпадают), выведите HTML - заголовок используя тэги < th >,
+//а потом выводите все записи.Ниже выведите все персоны построчно.Следите за корректностью колонок.
+//Для этого вам нужно итерировать общий набор колонок, а не каждую персону, колонки из которой могут отличаться от предыдущей.
+
+// const tableWrapper = document.getElementById('wrapper');
+// let stringTable = "<table border='1'>";
+// persons[0].set('IsWorks?', 'justForCheckDoesItWorks?');
+// for (let i = 0; i < persons.length; i++) {
+// 	stringTable += `<tr ">`;
+// 	for (let [key, value] of persons[i].entries()) {
+// 		stringTable += `<th style="color:blue">${key}</th>`;
+// 		stringTable += `<td style="color:green">${value}</td>`;
+// 	}
+// 	stringTable += '</tr>';
+// }
+// stringTable += '</table>';
+
+// tableWrapper.innerHTML += stringTable;
+
+// Задание на синий пояс.
+//Сделать HTML-конструктор из деревянной структуры, которая была на прошлом занятии:
+const someTree = {
+	tagName: 'div', //html tag
+	subTags: [
+		//вложенные тэги
+		{
+			tagName: 'div',
+			subTags: [
+				{
+					tagName: 'div',
+					text: 'some text',
+					attrs: {
+						color: 'green',
+					},
+				},
+				{
+					tagName: 'div',
+					text: 'some text 2',
+					attrs: {
+						color: 'blue',
+					},
+				},
+			],
+			attrs: {
+				'font-size': '48px',
+			},
+		},
+	],
+	attrs: {
+		border: 1,
+		'background-color': '#92cd00',
+		width: '500px',
+	},
+};
+
+//Для начала сделайте конструктор для верхнего уровня (в примере - table).
+//Потом с помощью копипасты сделайте то же самое с вложенным уровнем nestedTags(tr).Аналогично для уровня td.
+//Конструктор должен поддерживать вложенность до 3его уровня (как в примере).
+//В результате работы конструктора из примера выше должен получиться следующий HTML(в строке str):
+{
+	/* <table border=1>
+    <tr>
+        <td>some text</td>
+        <td>some text 2</td>
+    </tr>
+</table> */
+}
+//Переносы строк и отступы в результате не принципиальны, главное - структура HTML Проверьте ваш код на других структурах.
+
+// const tableWrapper = document.getElementById('wrapper');
+// let stringTable = '';
+// const htmlConstructor = (obj) => {
+// 	stringTable += `<${obj.tagName} style="`;
+// 	for (const [key, value] of Object.entries(obj.attrs)) {
+// 		stringTable += `${key}:${value};`;
+// 	}
+// 	stringTable += `">`;
+// 	for (const secondLevel of obj.subTags) {
+// 		stringTable += `<${obj.tagName} style="`;
+// 		for (const [key, value] of Object.entries(secondLevel.attrs)) {
+// 			stringTable += `${key}:${value};`;
+// 		}
+// 		stringTable += '">';
+// 		for (const thierdLevel of secondLevel.subTags) {
+// 			stringTable += `<${obj.tagName} style="`;
+// 			for (const [key, value] of Object.entries(thierdLevel.attrs)) {
+// 				stringTable += `${key}:${value};`;
+// 			}
+// 			stringTable += '">';
+// 			stringTable += `${thierdLevel.text}`;
+// 			stringTable += `</${thierdLevel.tagName}>`;
+// 		}
+// 		stringTable += `</${secondLevel.tagName}>`;
+// 	}
+// 	stringTable += `</${obj.tagName}>`;
+// };
+
+// htmlConstructor(someTree);
+
+// tableWrapper.innerHTML += stringTable;
+
+//destruct array
+//напишите код, который используя деструктуризацию положит:
+//четные числа в переменные even1, even2,
+//нечетные в odd1, odd2, odd3,буквы в отдельный массив
+// const [odd1, even1, odd2, even2, odd3, ...restArr] = [
+// 	1,
+// 	2,
+// 	3,
+// 	4,
+// 	5,
+// 	'a',
+// 	'b',
+// 	'c',
+// ];
+// console.log(odd1, even1, odd2, even2, odd3, restArr);
+
+//destruct string
+// число в переменную number
+// букву a в переменную s1
+// букву b в переменную s2
+// букву c в переменную s3
+
+// const [number, [s1, s2, s3]] = [1, 'abc'];
+// console.log(number, s1, s2, s3);
+
+//destruct 2
+//извлеките используя деструктуризацию имена детей в переменные name1 и name2
+// const {
+// 	children: [{ name: name1 }, { name: name2 }],
+// } = {
+// 	name: 'Ivan',
+// 	surname: 'Petrov',
+// 	children: [{ name: 'Maria' }, { name: 'Nikolay' }],
+// };
+// console.log(name1, name2);
+
+//destruct 3
+//извлеките используя деструктуризацию объектов два первых элемента и длину массива в переменные a, b и length
+// const [first, second, ...restArr] = [1, 2, 3, 4, 5, 6, 7, 10];
+// const { length } = restArr;
+// console.log(first, second, length);
+
+//Задание на черный пояс
+//Сделать предыдущее задание на черный пояс в упрощенном виде: не использовать четырехмерный массив
+//для хранения истории, а использовать ассоциативный массив: Например, если пользователь ввел 1212
+//за последние четыре хода, то мы ищем то, что было введено последний раз после такой последовательности:
+
+// const predictArray = new Map();
+// let hystory = '';
+
+// const internalGame = () => {
+// 	const answer = confirm('Choose OK  or Cancel') ? 0 : 1;
+// 	console.log(predictArray);
+// 	if (hystory.length === 3) {
+// 		hystory += answer;
+// 		predictArray.set(hystory, answer);
+// 		hystory = '';
+// 	} else {
+// 		hystory += answer;
+// 	}
+// 	internalGame();
+// };
+
+// internalGame();