js.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. // 1. Arrow to Functions +
  2. // Переведите любые пять заданий из предыдущего ДЗ по функциям в синтаксис function
  3. /*
  4. {
  5. function temp (a) {
  6. return a * 1.8 + 32;
  7. }
  8. }
  9. {
  10. function rgbToHex (r,g,b) {
  11. const hex = '#' +
  12. (r > 15 ? r.toString(16) : "0" + r.toString(16)) +
  13. (g > 15 ? g.toString(16) : "0" + g.toString(16)) +
  14. (b > 15 ? b.toString(16) : "0" + b.toString(16));
  15. return hex
  16. }
  17. console.log(rgbToHex(3,5,16))
  18. }
  19. {
  20. function result (porch, area, floor, flat) {
  21. const total = porch * floor * area; // Общее количество квартир в доме
  22. const totalPorch = total / porch; // Количество квартир в одном подьезде
  23. const numPorch = Math.floor(1 + (flat - 1) / totalPorch) ;
  24. const numFloor = Math.floor(1 + ((flat - 1) % totalPorch) / area);// Номер подьезда
  25. console.log(flatResult);
  26. return flatResult = {
  27. numPorch,
  28. numFloor
  29. }
  30. }
  31. }
  32. {
  33. function string (str = prompt('введите несколько строк разделенных \n')) {
  34. return str.split('\\n').join('\n');
  35. }
  36. }
  37. {
  38. function sign (userName = 'admin', pass ='qwerty' ) {
  39. if (userName === 'admin') {
  40. if (pass === 'qwerty') {
  41. alert('Успешный вход');
  42. } else if (pass === '' || pass == null) {
  43. alert('Пароль не введен');
  44. } else {
  45. alert('Неправильный пароль');
  46. }
  47. } else if (userName === '' || userName == null) {
  48. alert('Логин не введен');
  49. } else {
  50. alert("Неправильный логин");
  51. }
  52. }
  53. } */
  54. //2. createPerson +
  55. // Создайте функцию createPerson, которая принимает два параметра: name и surname, и возвращает объект с ключами name,
  56. // surname, getFullName. getFullName должна быть функцией, которая работает с объектом через this, а так же готова к
  57. // тому, что в объекте в последствии добавить ключ fatherName
  58. // {
  59. // const a = createPerson("Вася", "Пупкин");
  60. // a.fatherName = 'Иванович'
  61. // console.log(a.getFullName())
  62. //
  63. // const b = createPerson("Анна", "Иванова")
  64. // console.log(b.getFullName())
  65. //
  66. // const c = createPerson("Елизавета", "Петрова")
  67. // console.log(c.getFullName())
  68. //
  69. // function createPerson(name, surname) {
  70. // return {
  71. // name,
  72. // surname,
  73. // getFullName() {
  74. // return `${this.name} ${this.fatherName || ""} ${this.surname}`
  75. // }
  76. // }
  77. // }
  78. //
  79. // }
  80. // 3. createPersonClosure +
  81. // Задание в целом, аналогично предыдущему, однако, в объект заносить name, surname, fatherName и age не нужно. name и
  82. // surname должны быть параметрами, переменные age и fatherName объявите через let в теле createPersonClosure.
  83. // Внутри createPersonClosure объявите следующие функции: getName, getSurname, getFatherName, getAge, getFullName
  84. //
  85. // Эти функции должны возвращать переменные, объявленные в функции createPersonClosure
  86. // Следующие функции: setName, setSurname, setFatherName, setAge, setFullName, должны принимать один параметр (newName,
  87. // newSurname и т.п.), проверять его на корректность и менять значение переменных, объявленных внутри createPersonClosure.
  88. // Проверки на корректность:
  89. //
  90. // имя, фамилия, отчество должно быть строкой с большой буквы
  91. // возраст должен быть числом от 0 до 100.
  92. //
  93. // Если проверка на корректность не пройдена, функция не должна менять соответстующую переменную.
  94. // Функция setFullName должна разбивать строку по пробелам и заносить части строки в surname, name и fatherName
  95. // Все функции set должны возвращать то значение, которое по итогу попало во внутренюю переменную. То есть если новое
  96. // значение некорректно, то функция возвращает старое значение
  97. // В объекте-результате createPersonClosure должны быть только эти 10 функций (геттеров и сеттеров). В коде функций this
  98. // не используется
  99. //
  100. // const a = createPersonClosure("Вася", "Пупкин")
  101. // const b = createPersonClosure("Анна", "Иванова")
  102. // console.log(a.getName())
  103. // a.setAge(15)
  104. // a.setAge(150) //не работает
  105. //
  106. // b.setFullName("Петрова Анна Николаевна")
  107. // console.log(b.getFatherName()) //Николаевна
  108. //
  109. // {
  110. // function createPersonClosure(name, surname) {
  111. // let age;
  112. // let fatherName;
  113. // return obj = {
  114. // getName() {
  115. // return name
  116. // },
  117. // getSurname() {
  118. // return surname
  119. // },
  120. // getFatherName() {
  121. // return fatherName
  122. // },
  123. // getAge() {
  124. // return age
  125. // },
  126. // getFullName() {
  127. // return `${name} ${surname} ${fatherName} ${age}`
  128. // },
  129. //
  130. // setName (newName) {
  131. // if (newName[0] === newName[0].toUpperCase()) {
  132. // name = newName;
  133. // }
  134. // return name
  135. // },
  136. // setSurname (newSurname) {
  137. // if (newSurname[0] === newSurname[0].toUpperCase()) {
  138. // surname = newSurname;
  139. // }
  140. // return surname
  141. // },
  142. // setFatherName (newFatherName) {
  143. // if (newFatherName[0] === newFatherName[0].toUpperCase()) {
  144. // fatherName = newFatherName;
  145. // }
  146. // return fatherName
  147. // },
  148. // setAge(newAge) {
  149. // if(newAge>=0 && newAge<=100) {
  150. // age = newAge;
  151. // }
  152. // return age},
  153. //
  154. // setFullName (newFullName) {
  155. // let arr = newFullName.split("")
  156. // if (arr[0][0] === arr[0][0].toUpperCase() && arr[1][0] === arr[1][0].toUpperCase() && arr[2][0] === arr[2][0].toUpperCase()) {
  157. // surname = arr[0]
  158. // name = arr[1]
  159. // fatherName = arr[2]
  160. // }
  161. // return this.getFullName()
  162. // }
  163. // }
  164. // }
  165. //
  166. //
  167. // const a = createPersonClosure("Вася", "Пупкин")
  168. // a.setAge(20);
  169. // a.setFatherName("Иванович")
  170. // console.log(a.getFullName())
  171. //
  172. // const b = createPersonClosure("Анна", "Иванова")
  173. // b.setFullName("Петрова Анна Николаевна")
  174. // b.setAge(106)
  175. // console.log(b.getFullName())
  176. // }
  177. // 4. createPersonClosureDestruct +-
  178. // Сделайте набор параметров функции из предыдущего задания объектом, используйте деструктуризацию для извлечения параметров.
  179. // Задайте значения по умолчанию
  180. //
  181. // {
  182. // function createPersonClosureDestruct ({name = "Антон",
  183. // surname = "Анонов",
  184. // fatherName = "Анонович",
  185. // age = "25"} = {}){
  186. // const obj = {
  187. // name,
  188. // surname,
  189. // fatherName,
  190. // age
  191. // }
  192. // return obj
  193. // }
  194. //
  195. // function createPerson (name, surname) {
  196. // return {
  197. // name,
  198. // surname,
  199. // getFullName() {
  200. // return `${this.name} ${this.fatherName} ${this.surname}`
  201. // }
  202. // }
  203. // }
  204. // const a = createPerson("Вася Пупкин")
  205. // console.log(a)
  206. // }
  207. // 5. isSorted +
  208. // Напишите функцию isSorted, которая принимает набор параметров любого размера, и возвращает true, когда все параметры
  209. // - это числа, и каждое из них больше предыдущего параметра.
  210. // {
  211. // let arr = [1, 4, 7, 9]
  212. //
  213. // function isSorted(arr) {
  214. // if (typeof arr[0] !== "number") {
  215. // return console.log("false")
  216. // }
  217. // let previousValue = arr[0];
  218. //
  219. // for (let i = 1; i < arr.length; i++) {
  220. // if (typeof arr[i] !== "number" || previousValue > arr[i]) {
  221. // return console.log("false");
  222. // }
  223. // previousValue = arr[i]
  224. // }
  225. // return console.log("true")
  226. // }
  227. // console.log(isSorted(arr))
  228. // }
  229. //6. Test isSorted +
  230. // Используя циклический ввод в массив (задание array fill), обеспечьте ввод данных для isSorted
  231. // {
  232. // function isSorted(arr) {
  233. // console.log(arr)
  234. // if (typeof arr[0] !== "number") return false
  235. // let previousItem = arr[0]
  236. // for (let i = 1; i < arr.length; i++) {
  237. // if (typeof arr[i] !== "number" || previousItem > arr[i]) return false;
  238. // previousItem = arr[i]
  239. // }
  240. // return true
  241. // }
  242. //
  243. // function testIsSorted() {
  244. // const arr = []
  245. // let i
  246. // while (i = +prompt('Введите любое число')) {
  247. // arr.push(i)
  248. // }
  249. // alert('Получен массив' + arr)
  250. // return arr
  251. // }
  252. //
  253. // console.log(isSorted(testIsSorted()))
  254. // }
  255. // 7. personForm
  256. // Напишите функцию, которая принимает два параметра: родительский DOM-элемент и объект-результат работы
  257. // createPersonClosure (или createPersonClosureDestruct, результаты у обоих этих функций одинаковые) и рисует форму,
  258. // которая позволяет редактировать данные о персоне. В начале работы personForm создает 5 полей ввода (имя, фамилия,
  259. // отчество, возраст, ФИО) в родительском DOM-элементе и устанавливает туда значения, прочитанные с помощью getName,
  260. // getSurname и т.д. По событию oninput в любом из полей ввода нужно запускать соответствующий set..... Например при
  261. // изменении поля ввода имени должен запускаться setName(какой-то инпут.value). Функции set... возвращают значение, и его нужно занести
  262. // обратно в input. Таким образом в полях ввода невозможно будет ввести некорректные значения (например возраст не
  263. // сможет выйти за пределы 0-100 лет)
  264. //
  265. // const b = createPersonClosure("Анна", "Иванова")
  266. // b.setAge(15)
  267. // b.setFullName("Петрова Анна Николаевна")
  268. // {
  269. // let person = {
  270. // name: "Антон",
  271. // surname: "Анонов",
  272. // fatherName: "Анонович",
  273. // age: "25"
  274. // }
  275. // console.log(person)
  276. //
  277. // function personForm (person) {
  278. // for (const [key, value] of Object.entries(person)) {
  279. // let pole = document.createElement('input');
  280. // pole.innerText = value
  281. // document.body.appendChild(pole);
  282. // console.log(person)
  283. // }
  284. //
  285. // //насоздавать инпутов (5 штук)
  286. // //надобавлять их в parent
  287. // //навесить каждому из них обработчик события типа nameInput.oninput = () => {
  288. // //тут пытаемся менять person используя person.setName. Текст в инпуте должен стать таким, который вернет setName
  289. // }
  290. // personForm(person)
  291. // }
  292. //Обратите внимание, что при изменении ФИО должны поменяться поля имя, отчество и фамилия