index.js 8.8 KB

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