HW06.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647
  1. // Материал
  2. // Просмотрите, запустите и внимательно проанализируйте все примеры кода из материала лекции.
  3. {
  4. // сделано
  5. }
  6. // Literals
  7. // Найдите несколько окружающих объектов реального мира и создайте соответственные объекты Javascript.Например:
  8. {
  9. const flover = {
  10. type: 'palm',
  11. height: 150,
  12. color: 'green'
  13. }
  14. const dog = {
  15. type: 'york',
  16. sex: 'female',
  17. color: 'red'
  18. }
  19. const wife = {
  20. type: 'creator',
  21. sex: 'female',
  22. height: 165
  23. }
  24. }
  25. // Literals expand
  26. // Дайте возможность пользователю добавить любые два свойства в эти объекты с любыми значениями.Обеспечьте ввод названия ключа и значения через prompt прямо в литерале объекта { }
  27. {
  28. const flover = {
  29. type: 'palm',
  30. height: 150,
  31. color: 'green',
  32. [prompt('Введите первый параметр для объекта "Цветок"')]: prompt('Введите описание этого параметра'),
  33. [prompt('Введите второй параметр для объекта "Цветок"')]: prompt('Введите описание этого параметра')
  34. }
  35. const dog = {
  36. type: 'york',
  37. sex: 'female',
  38. color: 'red',
  39. [prompt('Введите первый параметр для объекта "Собака"')]: prompt('Введите описание этого параметра'),
  40. [prompt('Введите второй параметр для объекта "Собака"')]: prompt('Введите описание этого параметра')
  41. }
  42. const wife = {
  43. type: 'creator',
  44. sex: 'female',
  45. height: 165,
  46. [prompt('Введите первый параметр для объекта "Жена"')]: prompt('Введите описание этого параметра'),
  47. [prompt('Введите второй параметр для объекта "Жена"')]: prompt('Введите описание этого параметра')
  48. }
  49. }
  50. // Literals copy
  51. // Пусть пользователь введет еще одно свойство в переменную.Вставьте в новый объект эту переменную.Скопируйте объект из предыдущего задания в новый объект.
  52. {
  53. const flover = {
  54. type: 'palm',
  55. height: 150,
  56. color: 'green'
  57. }
  58. const dog = {
  59. type: 'york',
  60. sex: 'female',
  61. color: 'red'
  62. }
  63. const wife = {
  64. type: 'creator',
  65. sex: 'female',
  66. height: 165
  67. }
  68. const newObj = { ...flover }
  69. newObj[prompt('Введите имя ключа в поле ниже')] = prompt('Введите значение для указанного ранее ключа')
  70. console.log(newObj)
  71. }
  72. // Html tree
  73. // Сделайте декларативную JSON - структуру для тэгов выше, в которой:
  74. // каждый тэг будет объектом
  75. // имя тэга будет полем tagName
  76. // вложенные тэги будут в поле children
  77. // набор аттрибутов тэга будет в поле attrs.
  78. // Выведите значения текста во второй кнопке, используя.и[].
  79. // Выведите значение атрибута id во втором input, используя.и[].
  80. {
  81. const dataInput = {
  82. tagName: 'body',
  83. children: [
  84. {
  85. tagName: 'div',
  86. children: [
  87. {
  88. tagName: 'span',
  89. children: ['Enter a data please:']
  90. },
  91. {
  92. tagName: 'br'
  93. },
  94. {
  95. tagName: 'input',
  96. attrs: {
  97. type: 'text',
  98. id: 'name'
  99. }
  100. },
  101. {
  102. tagName: 'input',
  103. attrs: {
  104. type: 'text',
  105. id: 'surname'
  106. }
  107. }
  108. ]
  109. },
  110. {
  111. tagName: 'div',
  112. children: [
  113. {
  114. tagName: 'button',
  115. attrs: {
  116. id: 'ok'
  117. },
  118. children: ['OK']
  119. },
  120. {
  121. tagName: 'button',
  122. attrs: {
  123. id: 'cancel'
  124. },
  125. children: ['Cancel']
  126. }
  127. ]
  128. }
  129. ]
  130. }
  131. console.log(dataInput.children[1].children[1].children[0])
  132. console.log(dataInput.children[0].children[3].attrs.id)
  133. }
  134. // Parent
  135. // Добавьте каждому объекту тэга из предыдущего задания связь с родителем, используя свойство parent и присвоение
  136. {
  137. const dataInput = {
  138. tagName: 'body',
  139. children: [
  140. {
  141. tagName: 'div',
  142. children: [
  143. {
  144. tagName: 'span',
  145. children: ['Enter a data please:']
  146. },
  147. {
  148. tagName: 'br'
  149. },
  150. {
  151. tagName: 'input',
  152. attrs: {
  153. type: 'text',
  154. id: 'name'
  155. }
  156. },
  157. {
  158. tagName: 'input',
  159. attrs: {
  160. type: 'text',
  161. id: 'surname'
  162. }
  163. }
  164. ]
  165. },
  166. {
  167. tagName: 'div',
  168. children: [
  169. {
  170. tagName: 'button',
  171. attrs: {
  172. id: 'ok'
  173. },
  174. children: ['OK']
  175. },
  176. {
  177. tagName: 'button',
  178. attrs: {
  179. id: 'cancel'
  180. },
  181. children: ['Cancel']
  182. }
  183. ]
  184. }
  185. ]
  186. }
  187. dataInput.children[0].father = dataInput
  188. dataInput.children[1].father = dataInput
  189. dataInput.children[0].children[0].father = dataInput.children[0]
  190. dataInput.children[0].children[1].father = dataInput.children[0]
  191. dataInput.children[0].children[2].father = dataInput.children[0]
  192. dataInput.children[0].children[3].father = dataInput.children[0]
  193. dataInput.children[1].children[0].father = dataInput.children[1]
  194. dataInput.children[1].children[1].father = dataInput.children[1]
  195. }
  196. // Change OK
  197. // Добавьте(или измените) любой введенный пользователем атрибут тэга < button id = 'ok' > из задания HTML Tree.Пользователь также вводит значение этого атрибута.
  198. {
  199. const dataInput = {
  200. tagName: 'body',
  201. children: [
  202. {
  203. tagName: 'div',
  204. children: [
  205. {
  206. tagName: 'span',
  207. children: ['Enter a data please:']
  208. },
  209. {
  210. tagName: 'br'
  211. },
  212. {
  213. tagName: 'input',
  214. attrs: {
  215. type: 'text',
  216. id: 'name'
  217. }
  218. },
  219. {
  220. tagName: 'input',
  221. attrs: {
  222. type: 'text',
  223. id: 'surname'
  224. }
  225. }
  226. ]
  227. },
  228. {
  229. tagName: 'div',
  230. children: [
  231. {
  232. tagName: 'button',
  233. attrs: {
  234. id: 'ok'
  235. },
  236. children: ['OK']
  237. },
  238. {
  239. tagName: 'button',
  240. attrs: {
  241. id: 'cancel'
  242. },
  243. children: ['Cancel']
  244. }
  245. ]
  246. }
  247. ]
  248. }
  249. dataInput.children[1].children[0].attrs[prompt('ВВедите любой атрибут для тега "button"')] = prompt('Введите значение для этого атрибута')
  250. console.log(dataInput.children[1].children[0].attrs)
  251. }
  252. // Destructure
  253. // Используя деструктуризацию структуры из задания HTML Tree, Выведите значения текста в тэге span, Выведите значения текста во второй кнопке и Выведите значение атрибута id во втором input.
  254. {
  255. const dataInput = {
  256. tagName: 'body',
  257. children: [
  258. {
  259. tagName: 'div',
  260. children: [
  261. {
  262. tagName: 'span',
  263. children: ['Enter a data please:']
  264. },
  265. {
  266. tagName: 'br'
  267. },
  268. {
  269. tagName: 'input',
  270. attrs: {
  271. type: 'text',
  272. id: 'name'
  273. }
  274. },
  275. {
  276. tagName: 'input',
  277. attrs: {
  278. type: 'text',
  279. id: 'surname'
  280. }
  281. }
  282. ]
  283. },
  284. {
  285. tagName: 'div',
  286. children: [
  287. {
  288. tagName: 'button',
  289. attrs: {
  290. id: 'ok'
  291. },
  292. children: ['OK']
  293. },
  294. {
  295. tagName: 'button',
  296. attrs: {
  297. id: 'cancel'
  298. },
  299. children: ['Cancel']
  300. }
  301. ]
  302. }
  303. ]
  304. }
  305. const { children: [{ children: [{ children: [span] }] }] } = dataInput
  306. console.log(span)
  307. const { children: [, { children: [, { children: [button] }] }] } = dataInput
  308. console.log(button)
  309. const { children: [{ children: [, , , { attrs: { id } }] }] } = dataInput
  310. console.log(id)
  311. }
  312. // Destruct array
  313. // напишите код, который используя деструктуризацию положит:
  314. // четные числа в переменные even1, even2,
  315. // нечетные в odd1, odd2, odd3,
  316. // буквы в отдельный массив
  317. {
  318. let arr = [1, 2, 3, 4, 5, "a", "b", "c"]
  319. const [odd1, even1, odd2, even2, odd3, ...letters] = arr
  320. console.log(even1, even2, odd1, odd2, odd3, letters)
  321. }
  322. // Destruct string
  323. // напишите код, который используя деструктуризацию положит:
  324. // число в переменную number
  325. // букву a в переменную s1
  326. // букву b в переменную s2
  327. // букву c в переменную s3
  328. {
  329. let arr = [1, "abc"]
  330. const [number, [s1, s2, s3]] = arr
  331. console.log(number, s1, s2, s3)
  332. }
  333. // Destruct 2
  334. // извлеките используя деструктуризацию имена детей в переменные name1 и name2
  335. {
  336. let obj = {
  337. name: 'Ivan',
  338. surname: 'Petrov',
  339. children: [{ name: 'Maria' }, { name: 'Nikolay' }]
  340. }
  341. const { children: [{ name: name1 }, { name: name2 }] } = obj
  342. console.log(name1)
  343. console.log(name2)
  344. }
  345. // Destruct 3
  346. // извлеките используя деструктуризацию объектов два первых элемента и длину массива в переменные a, b и length
  347. {
  348. let arr = [1, 2, 3, 4, 5, 6, 7, 10]
  349. const { 0: a, 1: b, length } = arr
  350. console.log(a)
  351. console.log(b)
  352. console.log(length)
  353. }
  354. // Copy delete
  355. // Сделайте копию одного из объектов из задания Literals без ключа, который введет пользователь.
  356. {
  357. const flover = {
  358. type: 'palm',
  359. height: 150,
  360. color: 'green',
  361. [prompt('Введите первый параметр для объекта "Цветок"')]: prompt('Введите описание этого параметра'),
  362. [prompt('Введите второй параметр для объекта "Цветок"')]: prompt('Введите описание этого параметра')
  363. }
  364. const { type, height, color, ...rest } = flover
  365. const floverCopy = { type, height, color }
  366. console.log(floverCopy)
  367. console.log(flover === floverCopy)
  368. }
  369. // Currency real rate
  370. // Ниже приведен код, который скачивает актуальную информацию о курсах валют.Скопируйте ссылку из него вставьте в браузер интереса ради.Реализуйте калькулятор обмена валют следующим образом:
  371. // Пользователь вводит исходную валюту
  372. // Пользователь вводит валюту, в которую происходит конвертация
  373. // Пользователь вводит сумму в исходной валюте
  374. // Пользовател видит результат конвертации
  375. // Учтите, что пользователь может ввести какую - то дичь или название валют в неверном регистре
  376. {
  377. fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
  378. .then(data => {
  379. let startCurrency = prompt('Введите исходную валюту').toUpperCase()
  380. startCurrency = startCurrency in data.rates ? startCurrency : alert('такая валюта не поддерживается')
  381. let finishCurrency = prompt('Введите конечную валюту').toUpperCase()
  382. finishCurrency = finishCurrency in data.rates ? finishCurrency : alert('такая валюта не поддерживается')
  383. const summ = prompt('Введите сумму для обмена в исходной валюте')
  384. const { rates: { [startCurrency]: startCurrencValue } } = data
  385. const { rates: { [finishCurrency]: finishCurrencValue } } = data
  386. const result = (startCurrency === 'USD' ? summ * finishCurrencValue / startCurrencValue : summ * finishCurrencValue / startCurrencValue).toFixed(2)
  387. alert(isNaN(result) ? 'Вы ввели неправильно один или несколько араметров' : result)
  388. console.log(data) //изучите структуру, получаемую с сервера в консоли
  389. })
  390. }
  391. // Currency drop down
  392. // Сделайте выпадающий список с названиями всех валют, используя код из прошлого задания и накопление HTML - тэгов в строковой переменной.Для выпадающих списков в HTML предусмотрены тэги < select > и < option >
  393. {
  394. fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
  395. .then(data => {
  396. const currencies = Object.keys(data.rates)
  397. let str = '<select>'
  398. for (let currency of currencies) {
  399. str += `<option>${currency}</option>`
  400. }
  401. str += '</select>'
  402. document.write(str)
  403. console.log(data) //изучите структуру, получаемую с сервера в консоли
  404. })
  405. }
  406. // Currency table
  407. // Сделайте двумерную таблицу с курсами между всеми возможными парами валют по типу таблицы Пифагора, используя заготовку из задания Currency real rate:
  408. // Используйте только один запрос на сервер.Используйте расчет кросскурса для вычисления курса между любой парой валют
  409. {
  410. fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
  411. .then(data => {
  412. // создали массив заголовков-названий валют
  413. const currencies = []
  414. for (const currency in data.rates) {
  415. currencies.push(currency)
  416. }
  417. // создали строку заголовков валют
  418. let str = `<table style="text-align: center; border-collapse: collapse">`
  419. str += `<tr><td></td>`
  420. for (const currency of currencies) {
  421. str += `<td style="padding: 5px 10px;background-color: grey;">${currency}</td>`
  422. }
  423. str += `</tr>`
  424. // создали таблицу с кросс-курсами
  425. let i = 0
  426. for (const [key, value] of Object.entries(data.rates)) {
  427. str += (i % 2) ? `<tr style = "background-color:#0000001f">` : `<tr>`
  428. i++
  429. // str += `<tr>`
  430. str += `<td style="background-color: grey;">${key}</td>`
  431. for (const num of Object.values(data.rates)) {
  432. str += `<td style="padding: 5px 10px;">${(num / value).toFixed(2)}</td>`
  433. }
  434. str += `</tr>`
  435. }
  436. document.write(str)
  437. })
  438. }
  439. // Form
  440. // Напишите код, который их любого объекта создает форму HTML.Например для такого объекта
  441. // На экране должна появиться форма из 7 строк, с названиями полей, взятыми из ключей и полями ввода соответствующих типов.Значениями полей ввода должны быть значения из объекта.
  442. // Для создания правильного типа тэга input используйте оператор typeof Javascript:
  443. {
  444. const car = {
  445. "Name": "chevrolet chevelle malibu",
  446. "Cylinders": 8,
  447. "Displacement": 307,
  448. "Horsepower": 130,
  449. "Weight_in_lbs": 3504,
  450. "Origin": "USA",
  451. "in_production": false
  452. }
  453. let str = `<form>`
  454. for (let [key, value] of Object.entries(car)) {
  455. str += `<label>${key}: <input type="${typeof value === 'string' ? 'text' : typeof value === 'number' ? 'number' : 'checkbox'}" value="${value}" /></label></br></br>`
  456. }
  457. str += `</form>`
  458. document.write(str)
  459. }
  460. // Table
  461. // Даден любой массив с объектами
  462. // Сформировать таблицу(используя накопление тэгов HTML в строке):
  463. {
  464. const persons = [
  465. {
  466. name: 'Мария',
  467. fatherName: 'Ивановна',
  468. surname: 'Иванова',
  469. sex: 'female'
  470. },
  471. {
  472. name: 'Николай',
  473. fatherName: 'Иванович',
  474. surname: 'Иванов',
  475. age: 15
  476. },
  477. {
  478. name: 'Петр',
  479. fatherName: 'Иванович',
  480. surname: 'Иванов',
  481. married: true
  482. },
  483. ]
  484. // Первый проход - поиск колонок
  485. const keys = []
  486. for (const child of persons) {
  487. for (const key in child) {
  488. if (!keys.includes(key)) {
  489. keys.push(key);
  490. }
  491. }
  492. }
  493. // Заголовок
  494. let str = `<table style="border-collapse: collapse; text-align: center;">`
  495. str += `<tr style="background-color: grey;">`
  496. for (let key of keys) {
  497. str += `<td style="border: 1px solid black; padding: 5px 10px">${key}</td>`
  498. }
  499. str += `</tr>`
  500. // Второй проход - отображение таблицы
  501. for (const child of persons) {
  502. str += `<tr>`
  503. for (const num of keys) {
  504. str += `<td style="border: 1px solid black; padding: 5px 10px">${(Object.keys(child)).includes(num) ? child[num] : ''}</td>`
  505. }
  506. str += `</tr>`
  507. }
  508. str += `</table>`
  509. document.write(str)
  510. }
  511. // Тестовые данные
  512. {
  513. const persons = [
  514. {
  515. "Name": "chevrolet chevelle malibu",
  516. "Cylinders": 8,
  517. "Displacement": 307,
  518. "Horsepower": 130,
  519. "Weight_in_lbs": 3504,
  520. "Origin": "USA"
  521. },
  522. {
  523. "Name": "buick skylark 320",
  524. "Miles_per_Gallon": 15,
  525. "Cylinders": 8,
  526. "Displacement": 350,
  527. "Horsepower": 165,
  528. "Weight_in_lbs": 3693,
  529. "Acceleration": 11.5,
  530. "Year": "1970-01-01",
  531. },
  532. {
  533. "Miles_per_Gallon": 18,
  534. "Cylinders": 8,
  535. "Displacement": 318,
  536. "Horsepower": 150,
  537. "Weight_in_lbs": 3436,
  538. "Year": "1970-01-01",
  539. "Origin": "USA"
  540. },
  541. {
  542. "Name": "amc rebel sst",
  543. "Miles_per_Gallon": 16,
  544. "Cylinders": 8,
  545. "Displacement": 304,
  546. "Horsepower": 150,
  547. "Year": "1970-01-01",
  548. "Origin": "USA"
  549. },
  550. ]
  551. const keys = []
  552. for (const child of persons) {
  553. for (const key in child) {
  554. if (!keys.includes(key)) {
  555. keys.push(key);
  556. }
  557. }
  558. }
  559. let str = `<table style="border-collapse: collapse; text-align: center;">`
  560. str += `<tr style="background-color: grey;">`
  561. for (let key of keys) {
  562. str += `<td style="border: 1px solid black; padding: 5px 10px">${key}</td>`
  563. }
  564. str += `</tr>`
  565. for (const child of persons) {
  566. str += `<tr>`
  567. for (const num of keys) {
  568. str += `<td style="border: 1px solid black; padding: 5px 10px">${(Object.keys(child)).includes(num) ? child[num] : ''}</td>`
  569. }
  570. str += `</tr>`
  571. }
  572. str += `</table>`
  573. document.write(str)
  574. }