script.js 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  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. function push(arr) {
  138. var a = Math.ceil(Math.random()*10); //Создаем рандомную перенную а от 0 до 10
  139. for(var i = 0; i < a; i++) {
  140. arr.push(Math.ceil(Math.random()*10)); // В цикле от 0 до а добавляем в массив произвольное кол-во элементов
  141. }
  142. return arr;
  143. }
  144. push([1,2,3,4]);
  145. // 7. Напишите функцию аналог метода jQuery $.extend. Первый параметр
  146. // функции - целевой объект, поля которого будут изменены или расширены.
  147. // Остальные параметры - объекты-источники, полями которых будет расширяться целевой объект.
  148. var myInfo = {
  149. name: "Oleg",
  150. lastName: "Kriuchkov",
  151. skills: {
  152. guitar: "pro",
  153. games: "pro"
  154. }
  155. }
  156. var extraInfo = {
  157. skills: {
  158. cooking: "pro"
  159. },
  160. age: 24
  161. }
  162. function extend(obj) { // obj_1 - Целевой объект. Объекты-источники берутся из arguments.
  163. for(var i = 1; i < arguments.length; i++) {
  164. for(var key in arguments[i]) {
  165. if (obj[key] && typeof obj[key] == "object") {
  166. for(var extraKey in arguments[i][key]) {
  167. obj[key][extraKey] = arguments[i][key][extraKey];
  168. }
  169. } else {
  170. obj[key] = arguments[i][key];
  171. }
  172. }
  173. }
  174. return obj;
  175. }
  176. extend(myInfo, extraInfo);
  177. // 8. Напишите функцию setComment с параметрами: date, message, author. Дата и текст
  178. // сообщения - обязательные параметры, если какой-то из них или оба отсутствуют,
  179. // то выполнение функции должно обрываться, а пользователю выдаваться предупреждение (alert)
  180. // о том, что данные переданы некорректно. Параметр author - опциональный, но должна
  181. // происходить проверка: если параметр не передан, то вместо него подставляется значение ‘Anonymous’.
  182. // Функция распечатывает на странице текст в формате:
  183. // <имя_автора>, <дата>
  184. // <текст_сообщения>
  185. function setComment(date, message, author) {
  186. if(!date || !message) {
  187. return alert("Данные переданы некорректно.");
  188. }
  189. !author? author=author : author = "Anonymous";
  190. $("#task8").append("<div><span>"+author+", "+date+"</span><br><span>"+message+"</div>");
  191. $("#task8 div span:first-child").css({"font-weight": "800"});
  192. };
  193. setComment("2016-11-02", "Everything is ok", "John");
  194. // 9. Используя замыкание, напишите функцию createTimer, которая использует метод
  195. // performance.now() для получения текущей временной метки и служит для замера
  196. // времени выполнения другого кода:
  197. function createTimer() {
  198. var t = performance.now();
  199. return function () {
  200. return performance.now() - t;
  201. }
  202. }
  203. var timer = createTimer();
  204. alert('!')
  205. alert( timer() );
  206. // 10. Используя замыкания, создайте функцию createAdder(), которая принимает на вход
  207. // любой примитивный параметр и возвращает функцию, которая добавляет к первому параметру
  208. // второй.
  209. function createAdder(arg1) {
  210. return function (arg2) {
  211. return arg1 + arg2;
  212. }
  213. }