123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333 |
- $(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("<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;
- }
- }
|