$(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, ...arguments) { var arr2 = arr; for(var i = 0; i < arguments.length; i++) { arr2[arr2.length] = arguments[i]; } 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("
"+author+", "+date+"
"+message+"
"); $("#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; } }