task-01.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461
  1. // 3 persons
  2. // -------------УСЛОВИЕ-------------
  3. // Сделать три ассоциативных массива a, b, c, в каждом из которых должны быть поля name и surname.
  4. // -------------РЕШЕНИЕ-------------
  5. const task01block = document.createElement('div');
  6. task01block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
  7. const task01title = document.createElement('h2');
  8. task01title.innerText = 'Task-01 3 persons';
  9. const obja1 = document.createElement('p');
  10. const objb1 = document.createElement('p');
  11. const objc1 = document.createElement('p');
  12. root.appendChild(task01block);
  13. task01block.appendChild(task01title);
  14. class PersonObj {
  15. constructor() {
  16. this.name = "";
  17. this.surname = "";
  18. }
  19. }
  20. const a = new PersonObj();
  21. const b = new PersonObj();
  22. const c = new PersonObj();
  23. a.name ='Боб';
  24. a.surname = 'Губка';
  25. b.name ='Патрик';
  26. b.surname = 'Звезда';
  27. c.name ='Сквидварт';
  28. c.surname ='Осьминог';
  29. obja1.innerText = `a=${JSON.stringify(a)}`;
  30. objb1.innerText = `b=${JSON.stringify(b)}`;
  31. objc1.innerText = `c=${JSON.stringify(c)}`;
  32. task01block.appendChild(obja1);
  33. task01block.appendChild(objb1);
  34. task01block.appendChild(objc1);
  35. // different fields
  36. // -------------УСЛОВИЕ-------------
  37. // Добавьте некоторые другие поля (например age, fathername, sex (пол)) так, что бы набор полей отличался у разных объектов
  38. // -------------РЕШЕНИЕ-------------
  39. const task02block = document.createElement('div');
  40. task02block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
  41. const task02title = document.createElement('h2');
  42. task02title.innerText = 'Task-02 Different fields';
  43. const obja2 = document.createElement('p');
  44. const objb2 = document.createElement('p');
  45. const objc2 = document.createElement('p');
  46. root.appendChild(task02block);
  47. task02block.appendChild(task02title);
  48. a.age = '25';
  49. b.fathername = 'Патрикович';
  50. c.sex = 'Мужчина';
  51. obja2.innerText = `a=${JSON.stringify(a)}`;
  52. objb2.innerText = `b=${JSON.stringify(b)}`;
  53. objc2.innerText = `c=${JSON.stringify(c)}`;
  54. task02block.appendChild(obja2);
  55. task02block.appendChild(objb2);
  56. task02block.appendChild(objc2);
  57. // fields check
  58. // -------------УСЛОВИЕ-------------
  59. // Проверьте наличие необязательных полей у каждого из этих массивов.Если поле найдено, выведите его с помощью alert.
  60. // Проверку делайте по typeof или in в if.
  61. // -------------РЕШЕНИЕ-------------
  62. const task03block = document.createElement('div');
  63. task03block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
  64. const task03title = document.createElement('h2');
  65. task03title.innerText = 'Task-03 Fields check';
  66. const checkBtn = document.createElement('button');
  67. checkBtn.innerText = 'Check the fields';
  68. checkBtn.style = 'margin-bottom:10px';
  69. root.appendChild(task03block);
  70. task03block.appendChild(task03title);
  71. task03block.appendChild(checkBtn);
  72. const combinePersons = [ a, b, c ];
  73. a.id = 'a';
  74. b.id = 'b';
  75. c.id = 'c';
  76. checkBtn.onclick = () => {
  77. for (let person of combinePersons) {
  78. for (let key in person) {
  79. if (!(key === 'name' || key === 'surname'||key === 'id')) { alert(`В объекте {${person.id}} есть необязятельное поле '${key}'`) }
  80. }
  81. }
  82. }
  83. // array of persons
  84. // -------------УСЛОВИЕ-------------
  85. // Добавьте несколько ассоциативных массивов с персонами в обычный массив persons, например a, b, c.
  86. // Также добавьте персону литерально({ ...}).Получится обычный массив с элементами - ассоциативными массивами с персонами.
  87. // -------------РЕШЕНИЕ-------------
  88. const task04block = document.createElement('div');
  89. task04block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
  90. const task04title = document.createElement('h2');
  91. const obj4 = document.createElement('p');
  92. task04title.innerText = 'Task-04 Array of persons';
  93. root.appendChild(task04block);
  94. task04block.appendChild(task04title);
  95. let persons = [a, b, c];
  96. persons = [...persons, { name: 'Ларри', surname: 'Лобстер' }];
  97. obj4.innerText = `persons=${JSON.stringify(persons)}`;
  98. task04block.appendChild(obj4);
  99. // loop of persons
  100. // -------------УСЛОВИЕ-------------
  101. // Сделайте цикл, который выводит весь массив persons в форме объектов console.log(persons[i])
  102. // -------------РЕШЕНИЕ-------------
  103. const task05block = document.createElement('div');
  104. task05block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
  105. const task05title = document.createElement('h2');
  106. task05title.innerText = 'Task-05 Loop of persons';
  107. const objOutputBtn = document.createElement('button');
  108. objOutputBtn.innerText = 'Start console output';
  109. objOutputBtn.style = 'margin-bottom:10px';
  110. root.appendChild(task05block);
  111. task05block.appendChild(task05title);
  112. task05block.appendChild(objOutputBtn);
  113. objOutputBtn.onclick = () => {
  114. for (let i = 0; i < persons.length; i++) { console.log({ ...persons[i] }) };
  115. }
  116. // loop of name and surname
  117. // -------------УСЛОВИЕ-------------
  118. // Сделайте цикл, который выводит весь массив persons, но только Имя и Фамилию каждой персоны.
  119. // -------------РЕШЕНИЕ-------------
  120. const task06block = document.createElement('div');
  121. task06block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
  122. const task06title = document.createElement('h2');
  123. const task06comment = document.createElement('p');
  124. task06comment.innerText = 'Как я поняла, нужно выводить не массивы Object.entries, а именно объекты с 2мя полями. Реализовала путем копирования данных в другой массив объектов и удаления ненужных полей. Или как надо было?';
  125. task06title.innerText = 'Task-06 Loop of name and surname';
  126. const objNameSurnameOutputBtn = document.createElement('button');
  127. objNameSurnameOutputBtn.innerText = 'Start console Name&Surname output';
  128. objNameSurnameOutputBtn.style = 'margin-bottom:10px';
  129. root.appendChild(task06block);
  130. task06block.appendChild(task06title);
  131. task06block.appendChild(task06comment);
  132. task06block.appendChild(objNameSurnameOutputBtn);
  133. objNameSurnameOutputBtn.onclick = () => {
  134. for (let i = 0; i < persons.length; i++) {
  135. const subPersons = persons[i];
  136. for (let key in subPersons) {
  137. if (!(key==='name' || key==='surname'))
  138. { delete subPersons[key]}
  139. }
  140. console.log({ ...subPersons });
  141. }
  142. }
  143. // loop of loop of values
  144. // -------------УСЛОВИЕ-------------
  145. // Сделайте цикл, который выводит весь массив persons, но только значения всех полей из объектов.
  146. // Используйте вложенный цикл
  147. // -------------РЕШЕНИЕ-------------
  148. const task07block = document.createElement('div');
  149. task07block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
  150. const task07title = document.createElement('h2');
  151. task07title.innerText = 'Task-07 Loop of loop of values';
  152. const valuesOutputBtn = document.createElement('button');
  153. valuesOutputBtn.innerText = 'Start consol values output';
  154. valuesOutputBtn.style = 'margin-bottom:10px';
  155. root.appendChild(task07block);
  156. task07block.appendChild(task07title);
  157. task07block.appendChild(valuesOutputBtn);
  158. valuesOutputBtn.onclick = () => {
  159. for (let i = 0; i < persons.length; i++) {
  160. for (let value of Object.values(persons[i])) {
  161. console.log(value);
  162. }
  163. }
  164. }
  165. // fullName
  166. // -------------УСЛОВИЕ-------------
  167. // Сделайте цикл, которых добавляет поле fullName в каждый объект, содержащий ФИО.
  168. // Учтите, что поле fathername не является обязательным.
  169. // -------------РЕШЕНИЕ-------------
  170. const task08block = document.createElement('div');
  171. task08block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
  172. const task08title = document.createElement('h2');
  173. const task08startArray = document.createElement('p');
  174. task08startArray.innerText = `Начальный массив persons=${JSON.stringify(persons)}`;
  175. task08title.innerText = 'Task-08 FullName';
  176. const addFullNameBtn = document.createElement('button');
  177. addFullNameBtn.innerText = 'Добавить поле fullName';
  178. addFullNameBtn.style = 'margin-bottom:10px';
  179. root.appendChild(task08block);
  180. task08block.appendChild(task08title);
  181. task08block.appendChild(task08startArray);
  182. task08block.appendChild(addFullNameBtn);
  183. addFullNameBtn.onclick = () => {
  184. for (let i = 0; i < persons.length; i++) {
  185. persons[i].fullname = persons[i].surname + ' ' + persons[i].name+((persons[i].fathername)?(" "+persons[i].fathername):'');
  186. }
  187. const task08finalArray = document.createElement('p');
  188. task08finalArray.innerText = `Обновленный массив persons=${JSON.stringify(persons)}`;
  189. task08block.appendChild(task08finalArray);
  190. }
  191. // serialize
  192. // -------------УСЛОВИЕ-------------
  193. // Создайте JSON-строку из persons
  194. // -------------РЕШЕНИЕ-------------
  195. const task09block = document.createElement('div');
  196. task09block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
  197. const task09title = document.createElement('h2');
  198. task09title.innerText = 'Task-09 Serialize';
  199. const convertJSONBtn = document.createElement('button');
  200. convertJSONBtn.innerText = 'Вывести JSON-строку persons в консоль';
  201. convertJSONBtn.style = 'margin-bottom:10px';
  202. root.appendChild(task09block);
  203. task09block.appendChild(task09title);
  204. task09block.appendChild(convertJSONBtn);
  205. convertJSONBtn.onclick = () => {
  206. console.log(JSON.stringify(persons));
  207. }
  208. // deserialize
  209. // -------------УСЛОВИЕ-------------
  210. // Создайте ассоциативный массив с одной персоной из JSON-строки. Добавьте её в persons
  211. // -------------РЕШЕНИЕ-------------
  212. const task10block = document.createElement('div');
  213. task10block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
  214. const task10title = document.createElement('h2');
  215. task10title.innerText = 'Task-10 Deserialize';
  216. const addJsonBtn = document.createElement('button');
  217. addJsonBtn.innerText = 'Добавить JSON-персону в persons';
  218. addJsonBtn.style = 'margin-bottom:10px';
  219. root.appendChild(task10block);
  220. task10block.appendChild(task10title);
  221. task10block.appendChild(addJsonBtn);
  222. addJsonBtn.onclick = () => {
  223. const jsonPerson = '{ "name": "Сэнди", "surname": "Белка" }';
  224. console.log(jsonPerson);
  225. persons.push(JSON.parse(jsonPerson));
  226. console.log(persons);
  227. const task10persons = document.createElement('p');
  228. task10persons.innerText = `newPersons=${JSON.stringify(persons)}`;
  229. task10block.appendChild(task10persons);
  230. }
  231. // HTML
  232. // -------------УСЛОВИЕ-------------
  233. // Сделайте цикл, который выводит весь массив persons, в форме HTML-таблицы. Имя и Фамилия - колонки.
  234. // Пример кода:
  235. // var str = "<table border='1'>"
  236. // for (let i=0;i<1;i++){
  237. // str += `<tr><td>${i}</td><td>адын</td></tr>`
  238. // }
  239. // str += "</table>"
  240. // console.log(str)
  241. // document.write(str)
  242. // Модифицируйте код так, чтобы он выводил массив persons
  243. // -------------РЕШЕНИЕ-------------
  244. const task11block = document.createElement('div');
  245. task11block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
  246. const task11title = document.createElement('h2');
  247. task11title.innerText = 'Task-11 HTML';
  248. const makeTableBtn = document.createElement('button');
  249. makeTableBtn.innerText = 'Сформировать таблицу';
  250. makeTableBtn.style = 'margin-bottom:11px';
  251. root.appendChild(task11block);
  252. task11block.appendChild(task11title);
  253. task11block.appendChild(makeTableBtn);
  254. makeTableBtn.onclick = () => {
  255. var str = "<table border='1'><caption>Persons</caption><tr><th>№</th><th>Name</th><th>Surname</th>"
  256. for (let i=0;i<persons.length;i++){
  257. str += `<tr><td>&nbsp${i+1}&nbsp</td><td>&nbsp${persons[i].name}&nbsp</td><td>&nbsp${persons[i].surname}&nbsp</td></tr>`
  258. }
  259. str += "</table>"
  260. const task11table = document.createElement('div');
  261. task11table.innerHTML = str;
  262. console.log(str);
  263. task11block.appendChild(task11table);
  264. }
  265. // HTML optional fields
  266. // -------------УСЛОВИЕ-------------
  267. // Сделайте цикл, который выводит весь массив persons, в форме HTML - таблицы.
  268. // Имя и Фамилия, а также другие поля при наличии. Колонки: поля, строки таблицы - персоны.
  269. // -------------РЕШЕНИЕ-------------
  270. const task12block = document.createElement('div');
  271. task12block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
  272. const task12title = document.createElement('h2');
  273. task12title.innerText = 'Task-12 HTML optional fields';
  274. const makeAllFieldsTableBtn = document.createElement('button');
  275. makeAllFieldsTableBtn.innerText = 'Сформировать таблицу с полным перечнем полей';
  276. makeAllFieldsTableBtn.style = 'margin-bottom:12px';
  277. root.appendChild(task12block);
  278. task12block.appendChild(task12title);
  279. task12block.appendChild(makeAllFieldsTableBtn);
  280. makeAllFieldsTableBtn.onclick = () => {
  281. var str = "<table border='1'><caption>Persons</caption><tr><th th >№</th>";
  282. let keys = [];
  283. let result = [];
  284. for (let i = 0; i < persons.length; i++) {
  285. keys = Object.keys(persons[i]);
  286. result = [...result, ...keys];
  287. }
  288. keys=[...new Set(result)];
  289. for (let key of keys) {
  290. str += `<th>${key}</th>`;
  291. }
  292. str += `</tr>`;
  293. for (let i = 0; i < persons.length; i++){
  294. str += `<tr><td>&nbsp person ${i + 1}&nbsp</td>`;
  295. for (let key of keys) {
  296. (Object.keys(persons[i]).includes(key))?(str += `<td>&nbsp${persons[i][key]}&nbsp</td>`):(str += `<td>&nbsp---&nbsp</td>`);
  297. };
  298. str += `</tr>`;
  299. }
  300. str += "</table>"
  301. const task12table = document.createElement('div');
  302. task12table.innerHTML = str;
  303. task12block.appendChild(task12table);
  304. }
  305. // HTML tr color
  306. // -------------УСЛОВИЕ-------------
  307. // Добавьте к предыдущему примеру раскраску через строчку используя другой стиль тэга tr.
  308. // -------------РЕШЕНИЕ-------------
  309. const task13block = document.createElement('div');
  310. task13block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
  311. const task13title = document.createElement('h2');
  312. task13title.innerText = 'Task-13 HTML tr color';
  313. const makeColorTrTableBtn = document.createElement('button');
  314. makeColorTrTableBtn.innerText = 'Form colorful table';
  315. makeColorTrTableBtn.style = 'margin-bottom:13px';
  316. root.appendChild(task13block);
  317. task13block.appendChild(task13title);
  318. task13block.appendChild(makeColorTrTableBtn);
  319. makeColorTrTableBtn.onclick = () => {
  320. var str = "<table border='1'><caption>Persons</caption><tr><th th >№</th>";
  321. let keys = [];
  322. let result = [];
  323. for (let i = 0; i < persons.length; i++) {
  324. keys = Object.keys(persons[i]);
  325. result = [...result, ...keys];
  326. }
  327. keys=[...new Set(result)];
  328. for (let key of keys) {
  329. str += `<th>${key}</th>`;
  330. }
  331. str += `</tr>`;
  332. for (let i = 0; i < persons.length; i++){
  333. i%2?(str += `<tr><td>&nbsp person ${i + 1}&nbsp</td>`):(str += `<tr style='background-color:rgb(170, 214, 243)'><td>&nbsp person ${i + 1}&nbsp</td>`);
  334. for (let key of keys) {
  335. (Object.keys(persons[i]).includes(key))?(str += `<td>&nbsp${persons[i][key]}&nbsp</td>`):(str += `<td>&nbsp---&nbsp</td>`);
  336. };
  337. str += `</tr>`;
  338. }
  339. str += "</table>"
  340. const task13table = document.createElement('div');
  341. task13table.innerHTML = str;
  342. task13block.appendChild(task13table);
  343. }
  344. // HTML th optional
  345. // -------------УСЛОВИЕ-------------
  346. // Переработайте вывод persons в HTML с поиском всех возможных колонок во всех записях,
  347. // выводом названий колонок в заголовок HTML - таблицы.Для решения этой задачи вначале узнайте множество полей(ключей)
  348. // во всех записях(они не совпадают), выведите HTML - заголовок используя тэги < th >, а потом выводите все записи.
  349. // Ниже выведите все персоны построчно.Следите за корректностью колонок.Для этого вам нужно итерировать общий набор колонок,
  350. // а не каждую персону, колонки из которой могут отличаться от предыдущей.
  351. // -------------РЕШЕНИЕ-------------
  352. const task14block = document.createElement('div');
  353. task14block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
  354. const task14title = document.createElement('h2');
  355. const task14comment = document.createElement('p');
  356. task14title.innerText = 'Task-14 HTML th optional';
  357. task14comment.innerText = 'Не поняла, чем отличается от 12-го задания (в нем сделала то же самое)';
  358. const formTable14Btn = document.createElement('button');
  359. formTable14Btn.innerText = 'Сформировать таблицу';
  360. formTable14Btn.style = 'margin-bottom:14px';
  361. root.appendChild(task14block);
  362. task14block.appendChild(task14title);
  363. task14block.appendChild(task14comment);
  364. task14block.appendChild(formTable14Btn);
  365. formTable14Btn.onclick = () => { var str = "<table border='1'><caption>Persons</caption><tr><th th >№</th>";
  366. let keys = [];
  367. let result = [];
  368. for (let i = 0; i < persons.length; i++) {
  369. keys = Object.keys(persons[i]);
  370. result = [...result, ...keys];
  371. }
  372. keys=[...new Set(result)];
  373. for (let key of keys) {
  374. str += `<th>${key}</th>`;
  375. }
  376. str += `</tr>`;
  377. for (let i = 0; i < persons.length; i++){
  378. str += `<tr><td>&nbsp person ${i + 1}&nbsp</td>`;
  379. for (let key of keys) {
  380. (Object.keys(persons[i]).includes(key))?(str += `<td>&nbsp${persons[i][key]}&nbsp</td>`):(str += `<td>&nbsp---&nbsp</td>`);
  381. };
  382. str += `</tr>`;
  383. }
  384. str += "</table>"
  385. const task14table = document.createElement('div');
  386. task14table.innerHTML = str;
  387. task14block.appendChild(task14table); }