|
@@ -0,0 +1,333 @@
|
|
|
|
+$(document).ready(function() {
|
|
|
|
+
|
|
|
|
+ $(".button").css({ // Стилизация кнопки для запуска задач
|
|
|
|
+ "display": "inline-block",
|
|
|
|
+ "background": "grey",
|
|
|
|
+ "cursor": "pointer",
|
|
|
|
+ "padding": "10px",
|
|
|
|
+ "margin": "20px 0 0 20px",
|
|
|
|
+ "border-radius": "10px",
|
|
|
|
+ "color": "white"
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ $(".task").css({
|
|
|
|
+ "width": "50%",
|
|
|
|
+ "border-bottom": "1px solid black",
|
|
|
|
+ "box-sizing": "border-box",
|
|
|
|
+ "padding": "10px"
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// Задачки
|
|
|
|
+
|
|
|
|
+function exercises(par) {
|
|
|
|
+
|
|
|
|
+ var arr = [task_1, task_2, task_3, task_4, task_5, task_6, task_7, task_8, task_9];
|
|
|
|
+
|
|
|
|
+ arr[par-1]();
|
|
|
|
+
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// 1. Напишите функцию a, которая будет служить коротким именем для alert,
|
|
|
|
+// то есть выводит пользовательское сообщение в стандартном модальном окне.
|
|
|
|
+// Напишите функцию d, которая будет служить коротким именем для debugger,
|
|
|
|
+// то есть запускает процесс отладки.
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+function a(message) {
|
|
|
|
+
|
|
|
|
+ alert(message);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function d() {
|
|
|
|
+ debugger;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// 2. Напишите функцию max, которая сравнивает два числа и возвращает большее:
|
|
|
|
+
|
|
|
|
+function max(a,b) {
|
|
|
|
+ return a > b ? a : b;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// 3. Напишите функцию-аналог Math.min().
|
|
|
|
+// Функция принимает любое количество чисел и возвращает меньшее из них:
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+function min() {
|
|
|
|
+
|
|
|
|
+ var min = arguments[0];
|
|
|
|
+
|
|
|
|
+ for(var i = 1; i < arguments.length; i++) {
|
|
|
|
+
|
|
|
|
+ if(arguments[i] < min) {
|
|
|
|
+ min = arguments[i];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return min;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// 4. Изучите перебирающие методы массивов: forEach, filter, map. Создайте массив объектов
|
|
|
|
+// users (~10 объектов), каждый объект имеет поля firstname, lastname, age с разными значениями,
|
|
|
|
+// у некоторых есть поле middlename. Используя встроенные функции массивов:
|
|
|
|
+
|
|
|
|
+// a. Отфильтруйте пользователей младше 18 лет
|
|
|
|
+// b. Добавьте каждому объекту поле fullName, которое является конкатенацией firstname, middlename и lastname,
|
|
|
|
+// если есть все три, и только firstname и lastname, если middlename нет
|
|
|
|
+// c. Сформируйте новый массив, который содержит только полное имя пользователей
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+var user_1 = {
|
|
|
|
+ firstname: "Joe",
|
|
|
|
+ lastname: "Cocker",
|
|
|
|
+ age: 13
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+var user_2 = {
|
|
|
|
+ firstname: "Michael",
|
|
|
|
+ lastname: "jackson",
|
|
|
|
+ age: 35
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+var user_3 = {
|
|
|
|
+ firstname: "Elvis",
|
|
|
|
+ middlename: "Aaron",
|
|
|
|
+ lastname: "Presley",
|
|
|
|
+ age: 50
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+var user_4 = {
|
|
|
|
+ firstname: "Ray",
|
|
|
|
+ lastname: "Charles",
|
|
|
|
+ age: 10
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+var user_5 = {
|
|
|
|
+ firstname: "James",
|
|
|
|
+ lastname: "Brown",
|
|
|
|
+ age: 18
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+var user_6 = {
|
|
|
|
+ firstname: "Chuck",
|
|
|
|
+ middlename: "Edward",
|
|
|
|
+ lastname: "Berry",
|
|
|
|
+ age: 14
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+var user_7 = {
|
|
|
|
+ firstname: "Eick",
|
|
|
|
+ lastname: "Claptric",
|
|
|
|
+ middlename: "Patron",
|
|
|
|
+ age: 43
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+var user_8 = {
|
|
|
|
+ firstname: "BB",
|
|
|
|
+ lastname: "King",
|
|
|
|
+ age: 16
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+var user_9 = {
|
|
|
|
+ firstname: "Freddie",
|
|
|
|
+ lastname: "Mercury",
|
|
|
|
+ age: 33
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+var user_10 = {
|
|
|
|
+ firstname: "Yngwie",
|
|
|
|
+ lastname: "Malmsteen",
|
|
|
|
+ age: 45
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+var arr = [user_1, user_2, user_3, user_4, user_5, user_6, user_7, user_8, user_9, user_10];
|
|
|
|
+
|
|
|
|
+// сортируем пользователей с возрастом < 18
|
|
|
|
+var a = arr.filter( function(obj){
|
|
|
|
+
|
|
|
|
+ return obj.age < 18;
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+// добавляем поле middlename
|
|
|
|
+arr.forEach(function(obj) {
|
|
|
|
+
|
|
|
|
+ if (obj.middlename) {
|
|
|
|
+ obj.fullname = obj.firstname + " " + obj.middlename +" " + obj.lastname;
|
|
|
|
+ } else {
|
|
|
|
+
|
|
|
|
+ obj.fullname = obj.firstname + " " + obj.lastname;
|
|
|
|
+ }
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+// формируем новый массив который содержит только полное имя
|
|
|
|
+
|
|
|
|
+var arr2 = arr.map( function(obj) {
|
|
|
|
+
|
|
|
|
+ return obj.fullname;
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// 5. Напишите функцию аналог метода массива shift. Функция удаляет из переданного
|
|
|
|
+// в параметре массива первый элемент и возвращает новый массив.
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+function shift(arr) {
|
|
|
|
+
|
|
|
|
+ var arr2 = [];
|
|
|
|
+
|
|
|
|
+ for(var i = 1; i < arr.length; i++) {
|
|
|
|
+ arr2[i-1] = arr[i];
|
|
|
|
+ }
|
|
|
|
+ return arr2;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+shift([1,2,3,4]);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// 6. Напишите функцию аналог метода массива push. Функция добавляет в конец переданного
|
|
|
|
+// в параметре массивa произвольное количество элементов.
|
|
|
|
+
|
|
|
|
+var arr1 = [1,2,3,4];
|
|
|
|
+
|
|
|
|
+function push(arr) {
|
|
|
|
+
|
|
|
|
+ var arr2 = arr;
|
|
|
|
+
|
|
|
|
+ for(var i = 0; i < arguments.length; i++) {
|
|
|
|
+
|
|
|
|
+ arr2[arr2.length] = arguments[i+1];
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return arr2;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+push(arr1, 5, 6, 7, 8);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// 7. Напишите функцию аналог метода jQuery $.extend. Первый параметр
|
|
|
|
+// функции - целевой объект, поля которого будут изменены или расширены.
|
|
|
|
+// Остальные параметры - объекты-источники, полями которых будет расширяться целевой объект.
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+var myInfo = {
|
|
|
|
+ name: "Oleg",
|
|
|
|
+ lastName: "Kriuchkov",
|
|
|
|
+ skills: {
|
|
|
|
+ guitar: "pro",
|
|
|
|
+ games: "pro"
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+var extraInfo = {
|
|
|
|
+ skills: {
|
|
|
|
+ cooking: "pro"
|
|
|
|
+ },
|
|
|
|
+ age: 24
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+function extend(obj) { // obj_1 - Целевой объект. Объекты-источники берутся из arguments.
|
|
|
|
+
|
|
|
|
+ for(var i = 1; i < arguments.length; i++) {
|
|
|
|
+
|
|
|
|
+ for(var key in arguments[i]) {
|
|
|
|
+
|
|
|
|
+ if (obj[key] && typeof obj[key] == "object") {
|
|
|
|
+
|
|
|
|
+ for(var extraKey in arguments[i][key]) {
|
|
|
|
+
|
|
|
|
+ obj[key][extraKey] = arguments[i][key][extraKey];
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+
|
|
|
|
+ obj[key] = arguments[i][key];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return obj;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+extend(myInfo, extraInfo);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// 8. Напишите функцию setComment с параметрами: date, message, author. Дата и текст
|
|
|
|
+// сообщения - обязательные параметры, если какой-то из них или оба отсутствуют,
|
|
|
|
+// то выполнение функции должно обрываться, а пользователю выдаваться предупреждение (alert)
|
|
|
|
+// о том, что данные переданы некорректно. Параметр author - опциональный, но должна
|
|
|
|
+// происходить проверка: если параметр не передан, то вместо него подставляется значение ‘Anonymous’.
|
|
|
|
+// Функция распечатывает на странице текст в формате:
|
|
|
|
+// <имя_автора>, <дата>
|
|
|
|
+// <текст_сообщения>
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+function setComment(date, message, author) {
|
|
|
|
+
|
|
|
|
+ if(!date || !message) {
|
|
|
|
+ return alert("Данные переданы некорректно.");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ !author? author=author : author = "Anonymous";
|
|
|
|
+
|
|
|
|
+ $("#task8").append("<div><span>"+author+", "+date+"</span><br><span>"+message+"</div>");
|
|
|
|
+ $("#task8 div span:first-child").css({"font-weight": "800"});
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+setComment("2016-11-02", "Everything is ok", "John");
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// 9. Используя замыкание, напишите функцию createTimer, которая использует метод
|
|
|
|
+// performance.now() для получения текущей временной метки и служит для замера
|
|
|
|
+// времени выполнения другого кода:
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+function createTimer() {
|
|
|
|
+
|
|
|
|
+ var t = performance.now();
|
|
|
|
+
|
|
|
|
+ return function () {
|
|
|
|
+ return performance.now() - t;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+var timer = createTimer();
|
|
|
|
+alert('!')
|
|
|
|
+alert( timer() );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// 10. Используя замыкания, создайте функцию createAdder(), которая принимает на вход
|
|
|
|
+// любой примитивный параметр и возвращает функцию, которая добавляет к первому параметру
|
|
|
|
+// второй.
|
|
|
|
+
|
|
|
|
+function createAdder(arg1) {
|
|
|
|
+
|
|
|
|
+ return function (arg2) {
|
|
|
|
+
|
|
|
|
+ return arg1 + arg2;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|