script.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. $(document).ready(function() {
  2. $(".button").css({ // Стилизация кнопки для запуска задач
  3. "display": "inline-block",
  4. "background": "grey",
  5. "cursor": "pointer",
  6. "padding": "10px",
  7. "margin": "20px 0 0 20px",
  8. "border-radius": "10px",
  9. "color": "white"
  10. });
  11. $(".task").css({
  12. "width": "50%",
  13. "border-bottom": "1px solid black",
  14. "box-sizing": "border-box",
  15. "padding": "10px"
  16. });
  17. });
  18. // Задачки
  19. function exercises(par) {
  20. var arr = [task_1, task_2, task_3, task_4, task_5, task_6, task_7, task_8, task_9];
  21. arr[par-1]();
  22. };
  23. // 1. Напишите функцию a, которая будет служить коротким именем для alert,
  24. // то есть выводит пользовательское сообщение в стандартном модальном окне.
  25. // Напишите функцию d, которая будет служить коротким именем для debugger,
  26. // то есть запускает процесс отладки.
  27. function a(message) {
  28. alert(message);
  29. }
  30. function d() {
  31. debugger;
  32. }
  33. // 2. Напишите функцию max, которая сравнивает два числа и возвращает большее:
  34. function max(a,b) {
  35. return a > b ? a : b;
  36. }
  37. // 3. Напишите функцию-аналог Math.min().
  38. // Функция принимает любое количество чисел и возвращает меньшее из них:
  39. function min() {
  40. var min = arguments[0];
  41. for(var i = 1; i < arguments.length; i++) {
  42. if(arguments[i] < min) {
  43. min = arguments[i];
  44. }
  45. }
  46. return min;
  47. }
  48. // 4. Изучите перебирающие методы массивов: forEach, filter, map. Создайте массив объектов
  49. // users (~10 объектов), каждый объект имеет поля firstname, lastname, age с разными значениями,
  50. // у некоторых есть поле middlename. Используя встроенные функции массивов:
  51. // a. Отфильтруйте пользователей младше 18 лет
  52. // b. Добавьте каждому объекту поле fullName, которое является конкатенацией firstname, middlename и lastname,
  53. // если есть все три, и только firstname и lastname, если middlename нет
  54. // c. Сформируйте новый массив, который содержит только полное имя пользователей
  55. var user_1 = {
  56. firstname: "Joe",
  57. lastname: "Cocker",
  58. age: 13
  59. };
  60. var user_2 = {
  61. firstname: "Michael",
  62. lastname: "jackson",
  63. age: 35
  64. };
  65. var user_3 = {
  66. firstname: "Elvis",
  67. middlename: "Aaron",
  68. lastname: "Presley",
  69. age: 50
  70. };
  71. var user_4 = {
  72. firstname: "Ray",
  73. lastname: "Charles",
  74. age: 10
  75. };
  76. var user_5 = {
  77. firstname: "James",
  78. lastname: "Brown",
  79. age: 18
  80. };
  81. var user_6 = {
  82. firstname: "Chuck",
  83. middlename: "Edward",
  84. lastname: "Berry",
  85. age: 14
  86. };
  87. var user_7 = {
  88. firstname: "Eick",
  89. lastname: "Claptric",
  90. middlename: "Patron",
  91. age: 43
  92. };
  93. var user_8 = {
  94. firstname: "BB",
  95. lastname: "King",
  96. age: 16
  97. };
  98. var user_9 = {
  99. firstname: "Freddie",
  100. lastname: "Mercury",
  101. age: 33
  102. };
  103. var user_10 = {
  104. firstname: "Yngwie",
  105. lastname: "Malmsteen",
  106. age: 45
  107. };
  108. var arr = [user_1, user_2, user_3, user_4, user_5, user_6, user_7, user_8, user_9, user_10];
  109. // сортируем пользователей с возрастом < 18
  110. var a = arr.filter( function(obj){
  111. return obj.age < 18;
  112. });
  113. // добавляем поле middlename
  114. arr.forEach(function(obj) {
  115. if (obj.middlename) {
  116. obj.fullname = obj.firstname + " " + obj.middlename +" " + obj.lastname;
  117. } else {
  118. obj.fullname = obj.firstname + " " + obj.lastname;
  119. }
  120. });
  121. // формируем новый массив который содержит только полное имя
  122. var arr2 = arr.map( function(obj) {
  123. return obj.fullname;
  124. });
  125. // 5. Напишите функцию аналог метода массива shift. Функция удаляет из переданного
  126. // в параметре массива первый элемент и возвращает новый массив.
  127. function shift(arr) {
  128. var arr2 = [];
  129. for(var i = 1; i < arr.length; i++) {
  130. arr2[i-1] = arr[i];
  131. }
  132. return arr2;
  133. };
  134. shift([1,2,3,4]);
  135. // 6. Напишите функцию аналог метода массива push. Функция добавляет в конец переданного
  136. // в параметре массивa произвольное количество элементов.
  137. var arr1 = [1,2,3,4];
  138. function push(arr, ...arguments) {
  139. var arr2 = arr;
  140. for(var i = 0; i < arguments.length; i++) {
  141. arr2[arr2.length] = arguments[i];
  142. }
  143. return arr2;
  144. }
  145. push(arr1, 5, 6, 7, 8);
  146. // 7. Напишите функцию аналог метода jQuery $.extend. Первый параметр
  147. // функции - целевой объект, поля которого будут изменены или расширены.
  148. // Остальные параметры - объекты-источники, полями которых будет расширяться целевой объект.
  149. var myInfo = {
  150. name: "Oleg",
  151. lastName: "Kriuchkov",
  152. skills: {
  153. guitar: "pro",
  154. games: "pro"
  155. }
  156. }
  157. var extraInfo = {
  158. skills: {
  159. cooking: "pro"
  160. },
  161. age: 24
  162. }
  163. function extend(obj) { // obj_1 - Целевой объект. Объекты-источники берутся из arguments.
  164. for(var i = 1; i < arguments.length; i++) {
  165. for(var key in arguments[i]) {
  166. if (obj[key] && typeof obj[key] == "object") {
  167. for(var extraKey in arguments[i][key]) {
  168. obj[key][extraKey] = arguments[i][key][extraKey];
  169. }
  170. } else {
  171. obj[key] = arguments[i][key];
  172. }
  173. }
  174. }
  175. return obj;
  176. }
  177. extend(myInfo, extraInfo);
  178. // 8. Напишите функцию setComment с параметрами: date, message, author. Дата и текст
  179. // сообщения - обязательные параметры, если какой-то из них или оба отсутствуют,
  180. // то выполнение функции должно обрываться, а пользователю выдаваться предупреждение (alert)
  181. // о том, что данные переданы некорректно. Параметр author - опциональный, но должна
  182. // происходить проверка: если параметр не передан, то вместо него подставляется значение ‘Anonymous’.
  183. // Функция распечатывает на странице текст в формате:
  184. // <имя_автора>, <дата>
  185. // <текст_сообщения>
  186. function setComment(date, message, author) {
  187. if(!date || !message) {
  188. return alert("Данные переданы некорректно.");
  189. }
  190. !author? author=author : author = "Anonymous";
  191. $("#task8").append("<div><span>"+author+", "+date+"</span><br><span>"+message+"</div>");
  192. $("#task8 div span:first-child").css({"font-weight": "800"});
  193. };
  194. setComment("2016-11-02", "Everything is ok", "John");
  195. // 9. Используя замыкание, напишите функцию createTimer, которая использует метод
  196. // performance.now() для получения текущей временной метки и служит для замера
  197. // времени выполнения другого кода:
  198. function createTimer() {
  199. var t = performance.now();
  200. return function () {
  201. return performance.now() - t;
  202. }
  203. }
  204. var timer = createTimer();
  205. alert('!')
  206. alert( timer() );
  207. // 10. Используя замыкания, создайте функцию createAdder(), которая принимает на вход
  208. // любой примитивный параметр и возвращает функцию, которая добавляет к первому параметру
  209. // второй.
  210. function createAdder(arg1) {
  211. return function (arg2) {
  212. return arg1 + arg2;
  213. }
  214. }