HW07.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415
  1. // Материал
  2. // Как обычно, запустите все примерчики из материала занятия, разберитесь что там и как работает, возьмите отладчик / консоль и поиграйтесь с ними.походу возможно найдутся ошибки, сообщите мне о них пожалуйста
  3. {
  4. // сделано
  5. }
  6. // Temperature
  7. // Оформите Temperature как функцию, в которую параметром передается температура в одной системе, а возвращается в другой.Никаких prompt и console.log в коде быть не должно, если вы хотите в дальнейшем пользоваться этой функцией где угодно в коде удобно.Нужен ли блок кода в функции для решения этой задачи ?
  8. {
  9. const functionTemperature = (temperature, unit) => {
  10. let k
  11. unit.toLowerCase() === 'цельсий' ? k = 0 : unit.toLowerCase() === 'фаренгейт' ? k = 1 : alert('Вы ввели неправильну единицу измерения. Перепроверьте написание!')
  12. const temperatureConvertKelvin = `Указанная Вами температура соответствует: ${(1.8 * +temperature * (k + 1) + 32).toFixed(2)} в градусах Фаренгейта`
  13. const temperatureConvertCelsiy = `Указанная Вами температура соответствует: ${((+temperature - 32) / 1.8 * k).toFixed(2)} в градусах Цельсия`
  14. unit.toLowerCase() === 'цельсий' ? alert(temperatureConvertKelvin) : unit.toLowerCase() === 'фаренгейт' ? alert(temperatureConvertCelsiy) : alert('Один или несколько параметров введены неправильно')
  15. }
  16. functionTemperature(prompt('Укажите любое значение температуры (цифрами)'), prompt('Введите единицу измерения: Цельсий/Фаренгейт'))
  17. }
  18. // RGB
  19. // Оформите Number: RGB как функцию, в которую параметрами передаются три числа(r, g, b) => . Функция должна возвращать строку в нотации #RRGGBB.Используя условия или тернарный оператор добейтесь что бы в результате всегда было 7 символов, даже когда значение цвета меньше 15ти.Нужен ли блок кода этой функции ?
  20. {
  21. const colorConverter = ([red, green, blue]) => alert('Указанный Вами цвет для CSS: #' +
  22. ((+red) > 255 ? alert('Слишком большая цифра') : ((+red) < 16 ? + '0' + (+red).toString(16).toUpperCase() : (+red).toString(16).toUpperCase())) +
  23. ((+green) > 255 ? alert('Слишком большая цифра') : ((+green) < 16 ? + '0' + (+green).toString(16).toUpperCase() : (+green).toString(16).toUpperCase())) +
  24. ((+blue) > 255 ? alert('Слишком большая цифра') : ((+blue) < 16 ? + '0' + (+blue).toString(16).toUpperCase() : (+blue).toString(16).toUpperCase())))
  25. colorConverter(['Введите целое число 0 ... 255 для красного цвета', 'Введите целое число 0 ... 255 для зеленого цвета', 'Введите целое число 0 ... 255 для синего цвета'].map(prompt))
  26. }
  27. // Flats
  28. // Оформите Number: flats как функцию.Продумайте достаточное количество параметров для решения задачи.Функция должна возвращать объект вида { entrance, floor }, где entrance - номер падика, floor - номер этажа на котором находится квартира.
  29. {
  30. const numberFlats = ([numberOfFloors, numberOfFlats, searchingFlat]) => {
  31. const numberFlats = {}
  32. const searchingEntrance = Math.ceil(searchingFlat / ((+numberOfFloors) * +numberOfFlats))
  33. const searchingFloor = Math.ceil((+searchingFlat) / (+numberOfFlats) - (+numberOfFloors) * (searchingEntrance - 1))
  34. numberFlats.entrance = searchingEntrance
  35. numberFlats.floor = searchingFloor
  36. return numberFlats
  37. }
  38. numberFlats(['Введите количество этажей в доме:', 'Введите количество квартир на этаже:', 'Введите номер квартиры, которую нунжно найти:'].map(prompt))
  39. }
  40. // Credentials
  41. // Оформите задание String: credentials как функцию без параметров.Используйте функцию capitalize из домашнего задания по массивам.Функция должна содержать вызовы prompt и возвращать объект вида { name, surname, fatherName, fullName }
  42. {
  43. const enterPersonData = () => {
  44. const arr = {}
  45. const name = (prompt('Ввеедиет Ваше Имя в поле ниже')).trim()
  46. arr.name = `${name[0].toUpperCase()}${name.slice(1).toLowerCase()}`
  47. const surname = (prompt('Ввеедиет Вашу Фамилию в поле ниже')).trim()
  48. arr.surname = `${surname[0].toUpperCase()}${surname.slice(1).toLowerCase()}`
  49. const fatherName = (prompt('Ввеедиет Ваше Отчество в поле ниже')).trim()
  50. arr.fatherName = `${fatherName[0].toUpperCase()}${fatherName.slice(1).toLowerCase()}`
  51. const fullName = `${name[0].toUpperCase()}${name.slice(1).toLowerCase()} ${surname[0].toUpperCase()}${surname.slice(1).toLowerCase()} ${fatherName[0].toUpperCase()}${fatherName.slice(1).toLowerCase()}`
  52. arr.fullName = fullName
  53. return arr
  54. }
  55. enterPersonData()
  56. }
  57. // New line
  58. // Оформите задание String: new line как функцию с параметром - строкой.Функция должна возвращать строку с настоящими переносами.
  59. {
  60. const string = (str) => str.split('\\n').join('\n')
  61. alert(string(prompt('Введите в поле ниже любую строку. Для перехода на новую строку используйте комбинацию: \n')))
  62. }
  63. // Prompt OR
  64. // Оформите задание Prompt: OR как функцию, которая принимает строку для prompt и значение по умолчанию.Функция должна возвращать введенный текст или значение по умолчанию в случае отказа пользователя вводить что - либо.Используйте функцию без блока кода(функцию в одно выражение)
  65. {
  66. // const defaultValue =
  67. const age = (insertData, defaultValue) => insertData !== null && insertData !== '' ? `Вы родились в ${2022 - +insertData} году` : defaultValue
  68. alert(age(prompt('Укажите в поле, сколько вам полных лет (цифрами):'), 'Вы не ввели ваш возраст!'))
  69. }
  70. // Login And Password
  71. // Оформите задание Login And Password как функцию, которая принимает два параметра - правильный логин и пароль и возвращает true если логин и пароль введенные пользователями верны, или false если пользователь не смог.
  72. {
  73. const autorization = (login, pass) => login === 'admin' && pass === 'qwerty'
  74. autorization(prompt('Введите в поле ниже логин'), prompt('Введите пароль в поле нижне'))
  75. }
  76. // For Table
  77. // Оформите задание For Multiply Table как функцию, которая принимает любой массив с массивами, а возвращает строку HTML с тэгом < table > и всякими tr и td.
  78. {
  79. newArr = [[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8], [0, 3, 6, 9, 12], [0, 4, 8, 12, 16]]
  80. const table = (arr) => {
  81. let i = 0
  82. let str = `<table>`
  83. for (let string of arr) {
  84. str += (i % 2) ? `<tr style = "background-color:orange">` : `<tr style = "background-color:red">`
  85. i++
  86. for (let number of string) {
  87. str += `<td>${number}</td>`
  88. }
  89. str += `</tr>`
  90. }
  91. str += `</table>`
  92. return str
  93. }
  94. table(newArr)
  95. }
  96. // Filter Lexics
  97. // Оформите задание Filter Lexics как функцию, принимающую любую строку для проверки и массив некорректных слов(['бляха', 'муха', "пляха", "шабля"], например).Функция должна возвращать строку без этих некорректных слов.
  98. {
  99. const string = 'Скоро бляха зима, ни одна муха на улицу не вылетит. Пляха - это шото, а шабля - это мощное оружие'
  100. const badWords = ['бляха', 'муха', "пляха", "шабля"]
  101. const checkString = (str, badArr) => {
  102. const result = str.toLowerCase().split(' ').filter(x => !badArr.includes(x) ? x : '')
  103. return result.join(' ')
  104. }
  105. checkString(string, badWords)
  106. }
  107. // Currency Table
  108. // Оформите задание Currency Table как функцию, без параметров, которая складывает полученные данные во внутренний двумерный массив, после чего отображает его используя функцию из задания For Table
  109. {
  110. const arrTable = () => {
  111. fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
  112. .then(data => {
  113. const arrRow = []
  114. for (let [key, value] of Object.entries(data.rates)) {
  115. const arrData = []
  116. arrData.push(key)
  117. for (let num of Object.values(data.rates)) {
  118. arrData.push(+((num / value).toFixed(4)))
  119. }
  120. arrRow.push(arrData)
  121. }
  122. const table = (arr) => {
  123. let i = 0
  124. const currencies = []
  125. for (const currency in data.rates) {
  126. currencies.push(currency)
  127. }
  128. // table header
  129. let str = `<table style="text-align: center;">`
  130. str += `<tr><td></td>`
  131. for (const currency of currencies) {
  132. str += `<td style="padding: 3px 10px;">${currency}</td>`
  133. }
  134. str += `</tr>`
  135. // table body
  136. for (let string of arr) {
  137. str += !(i % 2) ? `<tr style = "background-color: #d1d1d1">` : `<tr>`
  138. i++
  139. for (let number of string) {
  140. str += `<td style="padding: 0 10px;">${number}</td>`
  141. }
  142. str += `</tr>`
  143. }
  144. str += `</table>`
  145. return str
  146. }
  147. document.write(table(arrRow))
  148. })
  149. }
  150. arrTable()
  151. }
  152. // Form
  153. // Оформите задание Form как функцию, которая принимает любой объект как параметр и создает форму на экране.
  154. {
  155. const enterForm = (insertObject) => {
  156. let str = `<form>`
  157. for (let [key, value] of Object.entries(insertObject)) {
  158. str += `<label>${key}: <input type="${typeof value === 'string' ? 'text' : typeof value === 'number' ? 'number' : 'checkbox'}" value="${value}" /></label></br></br>`
  159. }
  160. str += `</form>`
  161. return document.write(str)
  162. }
  163. // Объект для теста
  164. const car = {
  165. "Name": "chevrolet chevelle malibu",
  166. "Cylinders": 8,
  167. "Displacement": 307,
  168. "Horsepower": 130,
  169. "Weight_in_lbs": 3504,
  170. "Origin": "USA",
  171. "in_production": false
  172. }
  173. enterForm(car)
  174. }
  175. // Array of objects sort
  176. // Сделайте обобщенную функцию сортировки массива с объектами
  177. // Функция позволяет отсортировать любой набор данных по имени поля(второй параметр).Третьим параметром идет необязательный Boolean, который в случае true делает сортировку по возрастанию, в случае false - по убыванию.По умолчанию(без третьего параметра) происходит сортировка по возрастанию.
  178. {
  179. const persons = [
  180. { name: "Иван", age: 17 },
  181. { name: "Мария", age: 35 },
  182. { name: "Алексей", age: 73 },
  183. { name: "Яков", age: 12 },
  184. { name: "Семен", age: 24 },
  185. { name: "Антон", age: 2 },
  186. { name: "Петр", age: 102 },
  187. { name: "Николай", age: 44 }
  188. ]
  189. const sort = (sortArr, sortKey, sortOrder) => {
  190. const sortFunction = (a, b) => {
  191. if (sortOrder !== false) {
  192. return a[sortKey] > b[sortKey] ? 1 : -1;
  193. } else {
  194. return a[sortKey] > b[sortKey] ? -1 : 1;
  195. }
  196. }
  197. const newSortArr = sortArr.slice().sort(sortFunction)
  198. return newSortArr
  199. }
  200. console.log(`Сортировка по возрасту (по возрастанию):`, sort(persons, "age"))
  201. console.log(`Сортировка по имени (по убыванию):`, sort(persons, "name", false))
  202. }
  203. // Table
  204. // Оформите задание Table как функцию, которая принимает следующие параметры: //done
  205. // a. любой массив объектов для отображения //done
  206. // b. поле, по которому сортировать //done
  207. // c. порядок сортировки(убывание / возрастание) //done
  208. // Перед отображением:
  209. // a. скопируйте исходный массив, что бы сортировка не изменила оригинал;
  210. // b. отсортируйте с помощью функции из предыдущего задания
  211. // c. Отображение возьмите из задания Table
  212. {
  213. const persons = [
  214. {
  215. name: 'Мария',
  216. fatherName: 'Ивановна',
  217. surname: 'Иванова',
  218. sex: 'female',
  219. // married: true,
  220. // age: 27
  221. },
  222. {
  223. name: 'Николай',
  224. fatherName: 'Иванович',
  225. surname: 'Иванов',
  226. age: 15,
  227. // sex: 'male',
  228. // married: false,
  229. },
  230. {
  231. name: 'Петр',
  232. fatherName: 'Иванович',
  233. surname: 'Иванов',
  234. married: true,
  235. // sex: 'male',
  236. // age: 31
  237. }
  238. ]
  239. const sort = (sortArr, sortKey, sortOrder) => {
  240. // copy origin arr
  241. let newSortArr = sortArr.slice()
  242. // sorting arr
  243. const sortFunction = (a, b) => {
  244. if (sortOrder !== false) {
  245. return a[sortKey] > b[sortKey] ? 1 : -1;
  246. } else {
  247. return a[sortKey] > b[sortKey] ? -1 : 1;
  248. }
  249. }
  250. newSortArr.sort(sortFunction)
  251. // create arr with items of header
  252. const keys = []
  253. for (const child of newSortArr) {
  254. for (const key in child) {
  255. if (!keys.includes(key)) {
  256. keys.push(key);
  257. }
  258. }
  259. }
  260. // create table header
  261. let str = `<table style="border-collapse: collapse; text-align: center;"><tr style="background-color: grey;">`
  262. for (let key of keys) {
  263. str += `<td style="border: 1px solid black; padding: 5px 10px">${key}</td>`
  264. }
  265. str += `</tr>`
  266. // create table body
  267. for (const child of newSortArr) {
  268. str += `<tr>`
  269. for (const num of keys) {
  270. str += `<td style="border: 1px solid black; padding: 5px 10px">${(Object.keys(child)).includes(num) ? child[num] : ''}</td>`
  271. }
  272. str += `</tr>`
  273. }
  274. str += `</table>`
  275. // output table data
  276. document.write(str)
  277. return newSortArr
  278. }
  279. sort(persons, "name", false)
  280. console.log(`Исходный массив`, persons)
  281. }
  282. // Divide
  283. // Реализуйте задание Number: divide в HTML:
  284. {
  285. // реализовано в HTML файле HW07.html
  286. }
  287. // Calc Func
  288. // Вспомните первое ДЗ по Javascript, в котором вы делали всякие расчеты используя код на Javascript.Оформите это как функцию:
  289. // найдите все входящие данные, сделайте из них параметры
  290. // найдите переменную с результатом расчетов и сделайте так, что бы ваша функция возвращала этот результат.
  291. // Если результатов несколько, создайте объект из этих результатов и верните его.
  292. {
  293. const params = [
  294. {
  295. period: "day",
  296. lightUse: 100,
  297. rate: 144,
  298. },
  299. {
  300. period: "night",
  301. lightUse: 100,
  302. rate: 144,
  303. },
  304. {
  305. daysInMonth: 30
  306. }
  307. ]
  308. const dataElectrisity = (arr) => {
  309. const result = {}
  310. result.priceDay = (arr[0].lightUse * arr[0].rate * (arr[0].period === 'day' ? 1 : 0.5)) / 100
  311. result.priceNigth = (arr[1].lightUse * arr[1].rate * (arr[1].period === 'day' ? 1 : 0.5)) / 100
  312. result.priceMonth = result.priceDay + result.priceNigth
  313. result.usePerDay = +((arr[0].lightUse + arr[1].lightUse) / arr[2].daysInMonth).toFixed(2)
  314. return result
  315. }
  316. dataElectrisity(params)
  317. }
  318. // Calc Live
  319. // Используя пример из задания Divide и функцию из Calc Func сделайте несколько полей ввода в HTML, меняя которые вы будете получать результат калькуляции в каком - то div.
  320. {
  321. // реализовано в HTML файле HW07.html
  322. }