/* 1. Напишите функцию a, которая будет служить коротким именем для alert, то есть выводит пользовательское сообщение в стандартном модальном окне. Напишите функцию d, которая будет служить коротким именем для debugger, то есть запускает процесс отладки.*/ function a(mess) { alert(mess); } function d() { debugger; } /* 2. Напишите функцию max, которая сравнивает два числа и возвращает большее. */ function max (a,b) { if (a>b) { return a } else { return b} } console.log (max(3, 4)) // 4 /* 3. Напишите функцию-аналог Math.min(). Функция принимает любое количество чисел и возвращает меньшее из них. */ function min () { var arr = arguments; var x = arr[0]; for (var j = 1; j < arr.length; j++) { if (arr[j] < x) x = arr[j]; } return x; } console.log (min(301, 40, 8, 12, 63)) // 8 /* 4. Изучите перебирающие методы массивов: forEach, filter, map. Создайте массив объектов users (~10 объектов), каждый объект имеет поля firstname, lastname, age с разными значениями, у некоторых есть поле middlename. Используя встроенные функции массивов: Отфильтруйте пользователей младше 18 лет Добавьте каждому объекту поле fullName, которое является конкатенацией firstname, middlename и lastname, если есть все три, и только firstname и lastname, если middlename нет Сформируйте новый массив, который содержит только полное имя пользователей.*/ var users = [ {firstname: 'Slava', lastname: 'Ilchenko', age: '39' }, {firstname: 'Ivan', lastname: 'Ivanov', age: '23' }, {firstname: 'Vasya', middlename: 'Petrovich', lastname: 'Vasilenko', age: '26' }, {firstname: 'Mariya', middlename: 'Albertovna', lastname: 'Rebenko', age: '16' }, {firstname: 'German', lastname: 'Vetrov', age: '14' }, {firstname: 'Lidiya', middlename: 'Victorovna', lastname: 'Bebenko', age: '30' }, {firstname: 'Victor', lastname: 'Gogol', age: '17' }, {firstname: 'Victoriya', middlename: 'Rudolfovna', lastname: 'Gnatova', age: '27' }, {firstname: 'Fedor', lastname: 'Konev', age: '15' }, {firstname: 'Julia', middlename: 'Nilovaevna', lastname: 'Bern', age: '20' } ] var arrfilter = users.filter (function(users) { return users.age < 18; }); console.log (arrfilter); // {firstname: "Mariya", middlename: "Albertovna", lastname: "Rebenko", age: "16"} // {firstname: "German", lastname: "Vetrov", age: "14"} // {firstname: "Victor", lastname: "Gogol", age: "17"} // {firstname: "Fedor", lastname: "Konev", age: "15"} users.forEach (function(user, i, users) { if ('middlename' in users[i]) { user.fullName = user.firstname+' ' + user.middlename + ' ' + user.lastname; } else {user.fullName = user.firstname+' ' +user.lastname;} }); console.log(users); // 0: {firstname: "Slava", lastname: "Ilchenko", age: "39", fullName: "Slava Ilchenko"} // 1: {firstname: "Ivan", lastname: "Ivanov", age: "23", fullName: "Ivan Ivanov"} // 2: {firstname: "Vasya", middlename: "Petrovich", lastname: "Vasilenko", age: "26", fullName: "Vasya Petrovich Vasilenko"} // 3: {firstname: "Mariya", middlename: "Albertovna", lastname: "Rebenko", age: "16", fullName: "Mariya Albertovna Rebenko"} // 4: {firstname: "German", lastname: "Vetrov", age: "14", fullName: "German Vetrov"} // 5: {firstname: "Lidiya", middlename: "Victorovna", lastname: "Bebenko", age: "30", fullName: "Lidiya Victorovna Bebenko"} // 6: {firstname: "Victor", lastname: "Gogol", age: "17", fullName: "Victor Gogol"} // 7: {firstname: "Victoriya", middlename: "Rudolfovna", lastname: "Gnatova", age: "27", fullName: "Victoriya Rudolfovna Gnatova"} // 8: {firstname: "Fedor", lastname: "Konev", age: "15", fullName: "Fedor Konev"} // 9: {firstname: "Julia", middlename: "Nilovaevna", lastname: "Bern", age: "20", fullName: "Julia Nilovaevna Bern"} var results = users.map (function(user, i, users) { return user.fullName; }); console.log(results); // 0: "Slava Ilchenko" // 1: "Ivan Ivanov" // 2: "Vasya Petrovich Vasilenko" // 3: "Mariya Albertovna Rebenko" // 4: "German Vetrov" // 5: "Lidiya Victorovna Bebenko" // 6: "Victor Gogol" // 7: "Victoriya Rudolfovna Gnatova" // 8: "Fedor Konev" // 9: "Julia Nilovaevna Bern" /* 5. Напишите функцию аналог метода массива shift. Функция удаляет из переданного в параметре массива первый элемент и возвращает новый массив.*/ function del () { var arr = arguments; var myarr = []; for (var j = 1, i=0; j < arr.length; j++, i++) { myarr [i]=arr[j]; } return myarr; } console.log (del('ttt', 40, 8, 12, 63)) // (4) [40, 8, "54fgh", 63] /* 6. Напишите функцию аналог метода массива push. Функция добавляет в конец переданного в параметре массив произвольное количество элементов. */ function pp (arr, arrplus) { n = arr.length+arrplus.length; var newarr = new Array (n); for (var i=0, k=0; k < arr.length; i++, k++) { newarr [k] = arr [i]; } for (var j=0, k=arr.length; k < n; j++, k++) { newarr [k] = arrplus [j]; } return newarr; } var arr = [43, 56, 8+7, 66, 90]; var arrplus = [1, 4, 7, 'tgf']; console.log (pp(arr, arrplus)); // (9) [43, 56, 15, 66, 90, 1, 4, 7, "tgf"] /* 7. Напишите функцию аналог метода jQuery $.extend. && source.hasOwnProperty(property) Первый параметр функции - целевой объект, поля которого будут изменены или расширены. Остальные параметры - объекты-источники, полями которых будет расширяться целевой объект.*/ function extend (obj) { for(i=1; i < arguments.length; i++) { var source = arguments[i]; for (var property in source) { obj[property] = source[property]; } } return obj; }; var source = {firstname: 'Slava', city: 'Kharkov', age: 10} var s = extend(source, {firstname: 'John'}, {lastname: 'Doe'}, {dateofbirth: '1978-11-21'}); console.log(source); // Object {firstname: "John", city: "Kharkov", age: 10, lastname: "Doe", dateofbirth: "1978-11-21"} console.log(s); // Object {firstname: "John", city: "Kharkov", age: 10, lastname: "Doe", dateofbirth: "1978-11-21"} /* 8. Напишите функцию setComment с параметрами: date, message, author. Дата и текст сообщения - обязательные параметры, если какой-то из них или оба отсутствуют, то выполнение функции должно обрываться, а пользователю выдаваться предупреждение (alert) о том, что данные переданы некорректно. Параметр author - опциональный, но должна происходить проверка: если параметр не передан, то вместо него подставляется значение ‘Anonymous’. Функция распечатывает на странице текст в формате: <имя_автора>, <дата> <текст_сообщения> */ function setComment (date, message, author) { if (!(author)) { author = 'Anonymous';} if ((!(date) || !(message)) || (!(date) && !(message))) { alert ('Работа функции не возможна'); } else { $("body").toggleClass("comment"); $('.comment').append("

"); $('h3').append(author,', ', date); $('.comment').append("

"); $('.comment p').append(message); $('.comment').css({'padding': '0 10px', 'border': '1px solid black', 'width': '25%', 'margin': '0 auto'}); $('.comment').append("
"); } } setComment ('2018-05-02', 'Здрасти я ваша тетя', 'Slava'); /*9. Используя замыкание, напишите функцию createTimer, которая использует метод performance.now() для получения текущей временной метки и служит для замера времени выполнения другого кода. */ function createTimer () { var t0 = performance.now(); return function() { var t1 = performance.now(); var timer = t1 - t0; return timer; } } var timer = createTimer(); alert('!11111') // код, время выполнения которого нужно измерить alert( timer() + ' мкс'); // время в мкс от начала выполнения createTimer() до момента вызова timer() /* 10. Используя замыкания, создайте функцию createAdder(), которая принимает на вход любой примитивный параметр и возвращает функцию, которая добавляет к первому параметру второй.*/ function createAdder (a) { return function (b) { return (a+b); } } var hello = createAdder('Hello, '); alert( hello('Ivan') ); // Hello, Ivan alert( hello('Vasya') ); // Hello, Vasya var plus = createAdder(62); alert( plus(11) ); // 73 alert( plus(15) ); // 77