├── package.json ├── app ├── index.js ├── 05.date.js ├── 11.dom.js ├── 09.iterators.js ├── 02.strings.js ├── 07.promises.js ├── 10.sync-generators.js ├── 01.primitive-data-types.js ├── 08.async-functions.js ├── 04.objects.js ├── 03.arrays.js └── 06.functions.js ├── .gitignore ├── webpack.dev.js ├── README.md └── dist └── index.html /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "js-fundamentals", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "webpack-dev-server --config webpack.dev.js" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "webpack": "^5.70.0", 13 | "webpack-cli": "^4.9.2", 14 | "webpack-dev-server": "^4.7.4" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/index.js: -------------------------------------------------------------------------------- 1 | import * as o01 from './01.primitive-data-types'; 2 | import * as o02 from './02.strings'; 3 | import * as o03 from './03.arrays'; 4 | import * as o04 from './04.objects'; 5 | import * as o05 from './05.date'; 6 | import * as o06 from './06.functions'; 7 | import * as o07 from './07.promises'; 8 | import * as o08 from './08.async-functions'; 9 | import * as o09 from './09.iterators'; 10 | import * as o10 from './10.sync-generators'; 11 | import * as o11 from './11.dom'; 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /tmp 5 | 6 | # dependencies 7 | /node_modules 8 | /bower_components 9 | /app/vendor 10 | 11 | # IDEs and editors 12 | /.idea 13 | .project 14 | .classpath 15 | *.launch 16 | .settings/ 17 | 18 | # misc 19 | /.sass-cache 20 | /connect.lock 21 | /coverage/* 22 | /libpeerconnection.log 23 | npm-debug.log 24 | testem.log 25 | /typings 26 | .vscode/ 27 | 28 | # e2e 29 | /e2e/*.js 30 | /e2e/*.map 31 | 32 | #System Files 33 | .DS_Store 34 | Thumbs.db 35 | -------------------------------------------------------------------------------- /webpack.dev.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | module.exports = { 4 | mode: "development", 5 | devtool: "inline-source-map", 6 | devServer: { 7 | static: { 8 | directory: path.join(__dirname, 'dist'), 9 | }, 10 | port: 3000, 11 | open: true, 12 | compress: true 13 | }, 14 | entry: "./app/index.js", 15 | output: { 16 | filename: "index.js" 17 | }, 18 | resolve: { 19 | extensions: [".ts", ".js", ".json"] 20 | }, 21 | // module: { 22 | // rules: [ 23 | // // all files with a `.ts` or `.tsx` extension will be handled by `ts-loader` 24 | // { test: /\.ts$/, loader: "ts-loader" } 25 | // ] 26 | // } 27 | }; 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JS-Fundamentals 2 | 1. Var, Let, Const 3 | 2. Data Types 4 | 3. Strings 5 | 4. Arrays 6 | 5. Objects 7 | 6. Functions 8 | 7. DOM 9 | 10 | # JS-AOF 11 | 1. Arrays 12 | 2. Objects 13 | 3. Functions 14 | 15 | # Modern JavaScript: 16 | 1. Strings, Template Literals and Tagged Templates 17 | 2. Promises 18 | 3. Async Functions 19 | 4. Iterators 20 | 5. Sync Generators 21 | 22 | ## Requirements 23 | 24 | ### Install the following software: 25 | 1. Node.js 26 | 2. Git 27 | 28 | ## Run the project 29 | > npm install 30 | 31 | > npm start 32 | 33 | ## Contributors: 34 | 1. [SergBlack](https://github.com/SergBlack) - update webpack dependencies from v4 to v5 35 | 2. [Aleh Gupalo](https://gist.github.com/gupalooleg) - add task to 03.arrays.js 36 | 3. [Maksym Koval1](mailto:Maksym_Koval1@epam.com) - add task to 03.arrays.js and 04.objects.js -------------------------------------------------------------------------------- /app/05.date.js: -------------------------------------------------------------------------------- 1 | console.log('Topic: Date object'); 2 | 3 | // Task 1 4 | // RU: Создать текущую дату и вывести ее в формате dd.mm.yyyy и dd Month yyyy 5 | // EN: Create current date and display it in the console according to the format 6 | // dd.mm.yyyy и dd Month yyyy 7 | 8 | // Task 2 9 | // RU: Создать объект Date из строки '15.03.2025'. 10 | // EN: Create an object Date from the string '15.03.2025'. 11 | 12 | // Task 3 13 | // RU: Создать объект Date, который содержит: 14 | // 1. завтрашнюю дату, 15 | // 2. первое число текущего месяца, 16 | // 3. последнее число текущего месяца 17 | // EN: Create an object Date, which represents: 18 | // 1. tomorrow 19 | // 2. first day of the current month 20 | // 3. last day of the current month 21 | 22 | // Task 4 23 | // RU: Подсчитать время суммирования чисел от 1 до 1000. 24 | // EN: Calculate the time of summing numbers from 1 to 1000. 25 | 26 | // Task 5 27 | // RU: Подсчитать количество дней с текущей даты до Нового года. 28 | // EN: Calculate the number of days from the current date to the New Year. 29 | -------------------------------------------------------------------------------- /app/11.dom.js: -------------------------------------------------------------------------------- 1 | console.log('Topic: DOM'); 2 | 3 | // Task 01 4 | // Найти элемент с id= "t01". Вывести в консоль. 5 | // Найти родительский элемент и вывести в консоль. 6 | // Найти дочерние ноды, если они есть, и вывести в консоль 7 | // названия и тип нод. 8 | 9 | 10 | // Task 02 11 | // Подсчитать количество
  • элементов на странице. Для поиска элементов использовать 12 | // getElementsByTagName(). Вывести в консоль. 13 | // Добавить еще один элемент в список и вывести снова их количество. 14 | 15 | 16 | // Task 03 17 | // Получить элементы
  • используя метод querySelectorAll() и вывети их в консоль 18 | // Добавить новый
  • и снова вывести в консоль 19 | 20 | 21 | // Task 04 22 | // Найти все первые параграфы в каждом диве и установить цвет фона #ffff00 23 | 24 | 25 | // Task 05 26 | // Подсчитать сумму строки в таблице и вывести ее в последнюю ячейку 27 | 28 | 29 | // Task 06 30 | // Вывести значения всех атрибутов элемента с идентификатором t06 31 | 32 | 33 | // Task 07 34 | // Получить объект, который описывает стили, которые применены к элементу на странице 35 | // Вывести объект в консоль. Использовать window.getComputedStyle(). 36 | 37 | 38 | // Task 08 39 | // Установите в качестве контента элемента с идентификатором t08 следующий параграф 40 | //

    This is a paragraph 41 | 42 | // Task 09 43 | // Создайте элемент

    с некоторым текстовым контентом, который получить от пользователя, 44 | // с помощью prompt, перед элементом с идентификатором t08, 45 | // когда пользователь кликает на нем 46 | 47 | 48 | // Task 10 49 | // Удалите у элемента с идентификатором t06 атрибут role 50 | // Удалите кнопку с идентификатором btn, когда пользователь кликает по ней 51 | -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | JS Fundamentals, JS-AOF, Modern JavaScript 8 | 9 | 10 |

    Open Console

    11 | 12 |

    Promises

    13 | 14 | 15 | 16 |
    17 | 18 | 19 | 20 |

    DOM

    21 |
    22 |
    Task 01-03
    23 |
    24 |

    Lorem ipsum dolor sit amet

    25 |
      26 |
    • Item1
    • 27 |
    • Item2
    • 28 |
    • Item3
    • 29 |
    30 |
    31 |
    32 | 33 |
    34 |
    Task 04
    35 |
    36 |

    Lorem ipsum dolor sit amet

    37 |
      38 |
    • Item1
    • 39 |
    • Item2
    • 40 |
    • Item3
    • 41 |
    42 |

    Lorem ipsum dolor sit amet

    43 |
    44 |
    45 |

    Lorem ipsum dolor sit amet

    46 |
      47 |
    • Item1
    • 48 |
    • Item2
    • 49 |
    • Item3
    • 50 |
    51 |

    Lorem ipsum dolor sit amet

    52 |
    53 |
    54 | 55 |
    56 |
    Task 05
    57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 |
    1.22.13.3 5.3
    67 |
    68 | 69 |
    70 |
    Task 06-10
    71 | 72 |
    Click me to add new div
    73 | 74 |
    75 | 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /app/09.iterators.js: -------------------------------------------------------------------------------- 1 | console.log('Topic: Iterators'); 2 | // Task 1 3 | // RU: Написать функцию keyValueIterable(target), 4 | // которая на вход получает объект и возвращает итерируемый объект. 5 | // Итерируемый объект позволяет получить пары ключ/значение. 6 | // Выведите в консоль цвета из объекта colors. 7 | // EN: Create a function keyValueIterable(target) 8 | // which takes an objects and returns iterable object. 9 | // Iterable object allows you to get key/value pairs. 10 | // Display in a console all colors from the object colors. 11 | // const colors = { 12 | // green: '#0e0', 13 | // orange: '#f50', 14 | // pink: '#e07' 15 | // }; 16 | 17 | // const itColors = keyValueIterable(colors); 18 | // for (const [, color] of itColors) { 19 | // console.log(color); 20 | // } 21 | 22 | 23 | // Task 2 24 | // RU: В коллекции хранятся все имена пользователей, которые присоединились к определенной группе телеграмм. 25 | // Булевый флаг указывает, является ли пользователь администратором группы. 26 | // Создайте итератор, который возвращает только имена администраторов. 27 | // EN: The following collection store all the names of the user that have joined a particular telegram group. 28 | // The boolean flag indicates whether a user is an administrator of the group. 29 | // Сreatereate an iterator that returns only the administrators' names. 30 | 31 | // const users = { 32 | // anna: false, 33 | // boris: true, // admin 34 | // christina: false, 35 | // dave: false, 36 | // elena: false, 37 | // felix: true, // admin 38 | // }; 39 | // [...users].forEach(name => console.log(name)); // boris, felix 40 | 41 | 42 | // Task 3 43 | // RU: Написать функцию take(sequence, amount), которая из бесконечного итерируемого объекта random 44 | // вернет указаное количество элементов. 45 | // EN: Create a function take(sequence, amount), which returns a specified amount of numbers 46 | // from iterable object random 47 | 48 | // const random = { 49 | // [Symbol.iterator]: () => ({ 50 | // next: () => ({ 51 | // value: Math.random() 52 | // }) 53 | // }) 54 | // }; 55 | 56 | // const a = [...take(random, 3)]; 57 | // console.log(a); 58 | 59 | 60 | // Task 4 61 | // RU: Написать итерируемый итератор, который возвращает числа Фибоначи 62 | // Реализовать метод return для остановки итератора с помощью for-of + break 63 | // EN: Create iterable iterator, which produces Fibonacci numbers 64 | // Implement method return, which allows you to stop iterator using for-of + break 65 | 66 | // for (let v of Fib) { 67 | // console.log(v); 68 | // if (v > 50) break; 69 | // } 70 | 71 | 72 | // Task 5 73 | // RU: Написать итератор для чисел, который позволит получать массивы последовательных целых элементов. 74 | // Например, [...-3] => [0, -1, -2, -3], [...3] => [0, 1, 2, 3] 75 | // EN: Create iterator for numbers, which allows you to get arrays of sequential integers. 76 | // Example, [...-3] => [0, -1, -2, -3], [...3] => [0, 1, 2, 3] 77 | 78 | // console.log([...-5]); 79 | // console.log([...5]); 80 | -------------------------------------------------------------------------------- /app/02.strings.js: -------------------------------------------------------------------------------- 1 | console.log('Topic: Strings'); 2 | // Task 01. padStart 3 | // RU: Объявите три переменных: hour, minute, second. 4 | // Присвойте им следующие значения: 4, 35, 5. 5 | // Выведите в консоль время в формате 04:35:05. 6 | // EN: Declare three variables: hour, minute, second. 7 | // Assign them the following values: 4, 35, 5. 8 | // Display the time in the format 04:35:05 in the console. 9 | 10 | // Task 02. repeat 11 | // RU: Создайте функцию, которая выведет в консоль пирамиду на 9 уровней как показано ниже 12 | // 1 13 | // 22 14 | // 333 15 | // 4444 16 | // ... 17 | // EN: Create a function which displays a 9 level pyramid in the console according to the 18 | // following pattern 19 | // 1 20 | // 22 21 | // 333 22 | // 4444 23 | // ... 24 | 25 | // Task 03. includes 26 | // RU: Напишите код, который выводит в консоль true, если строка str содержит 27 | // 'viagra' или 'XXX', а иначе false. 28 | // Тестовые данные: 'buy ViAgRA now', 'free xxxxx' 29 | // EN: Create a snippet of code which displays the value true in the console 30 | // when str contains 'viagra' or 'XXX', otherwise it displays false. 31 | 32 | // Task 04. includes + index 33 | // RU: Проверить, содержит ли строка второе вхождение подстроки, 34 | // вернуть true/false. 35 | // EN: Check whether the string contains a second occurrence of a substring, 36 | // return true / false. 37 | 38 | // Task 05. Template literal 39 | // RU: Создать строку: "ten times two totally is 20" 40 | // используя переменные: 41 | // const a = 10; 42 | // const b = 2; 43 | // и template literal 44 | // EN: Create s string "ten times two totally is 20" 45 | // using the following variables: 46 | // const a = 10; 47 | // const b = 2; 48 | // and template literal 49 | 50 | // Task 06. normalize 51 | // RU: Создайте функцию, которая сравнивает юникод строки. 52 | // Сравните две строки 53 | // var str1 = '\u006d\u0061\u00f1'; 54 | // var str2 = '\u006d\u0061\u006e\u0303'; 55 | // EN: Create a function that compares the unicode strings. 56 | // Compare 2 strings: 57 | // var str1 = '\u006d\u0061\u00f1'; 58 | // var str2 = '\u006d\u0061\u006e\u0303'; 59 | 60 | // Task 07. endsWith 61 | // RU: Создайте функцию, которая на вход получает массив имен файлов и расширение файла 62 | // и возвращает новый массив, который содержит файлы указанного расширения. 63 | // EN: Create a function that gets an array of file names and a file extension as its parameters 64 | // and returns a new array that contains the files of the specified extension. 65 | 66 | // Task 08. String.fromCodePoint 67 | // RU: Создать функцию, которая выводит в консоль строчку в формате 'символ - код' 68 | // для кодов в диапазоне 78000 - 80000. 69 | // EN: Create a function that displays a line in the format 'character - code' to the console 70 | // for codes in the range of 78000 - 80000. 71 | 72 | // Task 09 73 | // RU: Создайте функцию, которая должна выводить в консоль следующую пирамиду 74 | // Пример: 75 | // pyramid(1) = '#' 76 | // 77 | // pyramid(2) = ' # ' 78 | // '###' 79 | // 80 | // pyramid(3) = ' # ' 81 | // ' ### ' 82 | // '#####' 83 | // EN: Create a function that should display the next pyramid in the console 84 | // Example: 85 | // pyramid(1) = '#' 86 | // 87 | // pyramid(2) = ' # ' 88 | // '###' 89 | // 90 | // pyramid(3) = ' # ' 91 | // ' ### ' 92 | // '#####' 93 | 94 | // Task 10 95 | // RU: Создайте тег-функцию currency, которая формитирует числа до двух знаков после запятой 96 | // и добавляет знак доллара перед числом в шаблонном литерале. 97 | // EN: Create a currency tag function that forms numbers up to two decimal digits. 98 | // and adds a dollar sign before the number in the template literal. 99 | -------------------------------------------------------------------------------- /app/07.promises.js: -------------------------------------------------------------------------------- 1 | console.log('Topic: Promises'); 2 | // Task 01 3 | // Создайте промис, который постоянно находится в состоянии pending. 4 | // В конструкторе промиса выведите в консоль сообщение "Promise is created". 5 | 6 | 7 | // Task 02 8 | // Создайте промис, который после создания сразу же переходит в состояние resolve 9 | // и возвращает строку 'Promise Data' 10 | // Получите данные промиса и выведите их в консоль 11 | 12 | 13 | // Task 03 14 | // Создайте промис, который после создания сразу же переходит в состояние rejected 15 | // и возвращает строку 'Promise Error' 16 | // Получите данные промиса и выведите их в консоль 17 | 18 | 19 | // Task 04 20 | // Создайте промис, который переходит в состояние resolved через 3с. 21 | // (Используйте setTimeout) 22 | // и возвращает строку 'Promise Data' 23 | // Получите данные промиса и выведите их в консоль 24 | 25 | 26 | // Task 05 27 | // Создайте литерал объекта handlePromise со следующими свойствами: 28 | // promise, resolve, reject, onSuccess, onError 29 | // Проинициализируйте первые три свойства null, 30 | // а последние два функциями, которые принимают один параметр и выводят 31 | // в консоль сообщения: первая - `Promise is resolved with data: ${paramName}` 32 | // вторая - `Promise is rejected with error: ${paramName}` 33 | // Создайте три обработчика события click для кнопок "Create Promise", "Resolve Promise", "Reject Promise". 34 | // Первый обработчик, создает промис, заполняет первые три свойства, 35 | // описаного выше объекта: свойство promise получает новый созданный промис, 36 | // свойства resolve и reject получают ссылки на соответствующие функции 37 | // resolve и reject. Следующие два обработчика запускают методы resolve и reject. 38 | 39 | 40 | // Task 06 41 | // Используйте предыдущее задание. Продублируйте строчку с методом then 42 | 43 | 44 | // Task 07 45 | // Создайте промис, который через 1 с возвращает строку "My name is". 46 | // Создайте функцию onSuccess, которая получает один параметр, 47 | // прибавляет к нему Ваше имя и возвращает новую строку из функции 48 | // Создайте функцию print, которая выводит в консоль значение своего параметра 49 | // Добавьте два метода then и зарегистрируйте созданные функции. 50 | 51 | 52 | // Task 08 53 | // Используйте предыдущий код. Добавьте в функцию onSuccess генерацию исключения 54 | // Обработайте данное исключение, используя catch. Обратите внимание, 55 | // что метод print при этом не выполняется. 56 | 57 | 58 | // Task 09 59 | // Напишите функцию getPromiseData, которая принимает один параметр - промис. Функция получает 60 | // значение промиса и выводит его в консоль 61 | // Объявите объект со свойтвом name и значением Anna. 62 | // Создайте врапер для этого объекта и вызовите для него функцию getPromiseData 63 | 64 | 65 | // Task 10 66 | // Создайте два промиса. Первый промис возвращает объект { name: "Anna" } через 2с, 67 | // а второй промис возвращает объект {age: 16} через 3 с. 68 | // Получите результаты работы двух промисов, объедините свойства объектов 69 | // и выведите в консоль 70 | 71 | 72 | // Task 11 73 | // Используйте предыдущее задание. Пусть теперь второй промис переходит в 74 | // состояние rejected со значением "Promise Error". Измените код, чтобы обработать 75 | // эту ситуацию. 76 | 77 | 78 | // Task 12 79 | // Создайте промис, который перейдет в состояние resolve через 5с и вернет строку 80 | // 'Promise Data'. 81 | // Создайте второй промис, который перейдет в состояние rejected по клику на 82 | // кнопку "Cancel Promise". Добавьте обработчик для кнопки. 83 | // Используя метод race организуйте "отмену промиса". 84 | 85 | // Task 13 86 | // Создайте два промиса. Первый промис возвращает объект { name: "Anna" } через 2с, 87 | // Второй промис переходит в состояние rejected со значением "Promise Error". 88 | // Запустите оба эти промисы в параллель и получите результаты тех, которые завершаться успешно 89 | 90 | 91 | 92 | // Task 14 93 | // Создайте два промиса. Первый промис возвращает объект { name: "Anna" } через 2с, 94 | // Второй промис возвращает дефолтный объект { name: "Unknown" } через 1с. 95 | // Запустите оба эти промисы в параллель и получите результат того, который отработает первым -------------------------------------------------------------------------------- /app/10.sync-generators.js: -------------------------------------------------------------------------------- 1 | console.log('Topic: Sync-Generators'); 2 | 3 | // Task 1. 4 | // RU: Напишите функцию-генератор generateSequence, которая генерирует числа в диапазоне от start до end. 5 | // EN: Create function-generator generateSequence, which generates and returns numbers from start to end. 6 | 7 | 8 | // Task 2. Long Sequences 9 | // RU: Создать массив из чисел от 1 до 1000. 10 | // Реализовать функцию-генератор для формирования всех пар из этого массива. 11 | // Генератор возвращает одну пару за один раз. 12 | // Результат [1, 1], [1, 2], ..., [2, 1], [2, 2], ..., [1000, 1000] 13 | // EN: Create an array of numbers from 1 to 1000. 14 | // Implement a generator function to create all pairs from this array. 15 | // Result [1, 1], [1, 2], ..., [2, 1], [2, 2], ..., [1000, 1000] 16 | 17 | 18 | // Task 3. 19 | // RU: Реализуйте функцию генерации чисел Фибоначчи до бесконечности 20 | // EN: Implement the infinite function-generator of generating Fibonacci numbers 21 | 22 | 23 | // Task 4. yield* 24 | // RU: Реализуйте функцию-генератор, которая будет генерировать последовательность 25 | // символов от 0 до 9, затем от a до z, затем от A до Z. Воспользуйтесь функцией генератором 26 | // generateSequence, реализованой выше, String.fromCharCode(code), и диапазоном чисел от 48 до 57, 27 | // от 65 до 90 и от 97 до 122 28 | // EN: Create a function-generator that will generate a sequence 29 | // characters from 0 to 9, then from a to z, then from A to Z. 30 | // Use the function-generator generateSequence implemented above, 31 | // String.fromCharCode (code), and a range of numbers from 48 to 57, 32 | // 65 to 90 and 97 to 122 33 | 34 | 35 | // Task 5. Sync Piping 36 | // RU: Создайте-функцию генератор multipleByTwo, которая принимает массив чисел, 37 | // умножает каждое число на 2 и возвращает их по одному 38 | // Создайте-функцию генератор minusOne, которая принимает массив чисел, 39 | // отнимает 1 и возвращает их по одному 40 | // Создайте-функцию генератор isMultipleOfThree, которая принимает массив чисел, 41 | // и возвращает только те, которые делятся на 3 без остатка по одному 42 | // Объявите массив от 0 до 9 43 | // Вызовите первую функцию и передайте ей массив, результат этой функции передайте второй 44 | // а затем результат второй передайтетретей. 45 | // Примените спред оператор к резульату третей функции и создайте массив тех чисел, 46 | // которые останутся 47 | // EN: Create a function-generator multipleByTwo that takes an array of numbers, 48 | // multiplies each number by 2 and returns them one at a time 49 | // Create a function-generator minusOne that takes an array of numbers, 50 | // takes 1 and returns them one at a time 51 | // Create a function-generator isMultipleOfThree that takes an array of numbers, 52 | // and returns only those that are divided by 3 without remain part one at a time 53 | // Declare an array from 0 to 9 54 | // Call the first function and pass an array to it, pass the result of this function 55 | // to the second and then the result of the second pass to the third function. 56 | // Apply the spread operator to the result of the third function and create an array 57 | // of those numbers which will remain 58 | 59 | 60 | // Task 6. Communication with Infinite Generator 61 | // RU: Реализуйте бесконечную функцию-генератор calculation, которая будет выводить выражения 62 | // a + b = ?, где a, b будет случайно генерировать и запрашивать у пользователя ответ. 63 | // Если ответ верный, то писать в консоль true, иначе false. 64 | // Запустите код в консоли браузера 65 | // EN: Implement an infinite calculation generator-function that will output expressions 66 | // a + b = ?, where a, b will be randomly generated and request a response from the user. 67 | // If the answer is correct, then write true to the console, otherwise false. 68 | 69 | 70 | // Task 7. throw method 71 | // RU: Модифицируйте код предыдущего задания так, чтобы при вызове it.throw() генератор 72 | // не прекращал свою работу 73 | // EN: Modify the code of the previous task so that when it.throw() is called, the generator 74 | // did not stop its work 75 | 76 | 77 | // Task 8. 78 | // RU: В коллекции хранятся все имена пользователей, которые присоединились 79 | // к определенной группе телеграмм. 80 | // Булевый флаг указывает, является ли пользователь администратором группы. 81 | // Создайте генератор, который на вход получает этот объект и 82 | // возвращает только имена администраторов по одному за вызов. 83 | // EN: The collection stores all the usernames that joined 84 | // to a specific telegram group. 85 | // A boolean flag indicates whether the user is a group administrator. 86 | // Create a generator that receives this object as input 87 | // and returns only admin names. 88 | 89 | // const users = { 90 | // anna: false, 91 | // boris: true, // admin 92 | // christina: false, 93 | // dave: false, 94 | // elena: false, 95 | // felix: true, // admin 96 | // }; 97 | -------------------------------------------------------------------------------- /app/01.primitive-data-types.js: -------------------------------------------------------------------------------- 1 | console.log('Topic: Primitive Data Types'); 2 | 3 | // Task 01 4 | // Объявите переменную days и проинициализируйте ее числом от 1 до 10. 5 | // Преобразуйте это число в количество секунд и выведите в консоль. 6 | 7 | 8 | 9 | // Task 02 10 | // Объявите две переменные: admin и name. Установите значение переменной name 11 | // в ваше имя. Скопируйте это значение в переменную admin и выведите его в консоль. 12 | 13 | 14 | 15 | // Task 03 16 | // Объявите три переменных: a, b, c. Присвойте им следующие значения: 10, 2, 5. 17 | // Объявите переменную result1 и вычислите сумму значений переменных a, b, c. 18 | // Объявите переменную min и вычислите минимальное значение переменных a, b, c. 19 | // Выведите результат в консоль. 20 | 21 | 22 | 23 | // Task 04 24 | // Объявите три переменных: hour, minute, second. Присвойте им следующие значения: 25 | // 10, 40, 25. Выведите в консоль время в формате 10:40:25. 26 | 27 | 28 | 29 | // Task 05 30 | // Объявите переменную minute и проинициализируйте ее целым числом. 31 | // Вычислите к какой четверти принадлежит это число и выведите в консоль. 32 | 33 | 34 | 35 | // Task 06 36 | // Объявите две переменные, которые содержат стоимость товаров: 37 | // первый товар - 0.10 USD, второй - 0.20 USD 38 | // Вычислите сумму и выведите в консоль. Используйте toFixed() 39 | 40 | 41 | 42 | // Task 07 43 | // Объявите переменную a. 44 | // Если значение переменной равно 0, выведите в консоль "True", иначе "False". 45 | // Проверьте, что будет появляться в консоли для значений 1, 0, -3. 46 | 47 | 48 | 49 | // Task 08 50 | // Объявите две переменных: a, b. Вычислите их сумму и присвойте переменной result. 51 | // Если результат больше 5, выведите его в консоль, иначе умножте его на 10 52 | // и выведите в консоль. 53 | // Данные для тестирования: 2, 5 и 3, 1. 54 | 55 | 56 | 57 | // Task 09 58 | // Объявите переменную month и проинициализируйте ее числом от 1 до 12. 59 | // Вычислите время года и выведите его в консоль. 60 | 61 | 62 | 63 | // Task 10 64 | // Выведите в консоль все числа от 1 до 10. 65 | 66 | 67 | 68 | // Task 11 69 | // Выведите в консоль все четные числа от 1 до 15. 70 | 71 | 72 | 73 | // Task 12 74 | // Нарисуйте в консоле пирамиду на 10 уровней как показано ниже 75 | // x 76 | // xx 77 | // xxx 78 | // xxxx 79 | // ... 80 | 81 | 82 | 83 | // Task 13 84 | // Нарисуйте в консоле пирамиду на 9 уровней как показано ниже 85 | // 1 86 | // 22 87 | // 333 88 | // 4444 89 | // ... 90 | 91 | 92 | 93 | // Task 14 94 | // Запросите у пользователя какое либо значение и выведите его в консоль. 95 | 96 | 97 | 98 | // Task 15 99 | // Перепишите if используя тернарный опертор 100 | // if (a + b < 4) { 101 | // result = 'Мало'; 102 | // } else { 103 | // result = 'Много'; 104 | // } 105 | 106 | 107 | 108 | // Task 16 109 | // Перепишите if..else используя несколько тернарных операторов. 110 | // var message; 111 | // if (login == 'Вася') { 112 | // message = 'Привет'; 113 | // } else if (login == 'Директор') { 114 | // message = 'Здравствуйте'; 115 | // } else if (login == '') { 116 | // message = 'Нет логина'; 117 | // } else { 118 | // message = ''; 119 | // } 120 | 121 | 122 | 123 | // Task 17 124 | // Замените for на while без изменения поведения цикла 125 | // for (var i = 0; i < 3; i++) { 126 | // alert( "номер " + i + "!" ); 127 | // } 128 | 129 | 130 | // Task 18 131 | // Напишите цикл, который предлагает prompt ввести число, большее 100. 132 | // Если пользователь ввёл другое число – попросить ввести ещё раз, и так далее. 133 | // Цикл должен спрашивать число пока либо посетитель не введёт число, 134 | // большее 100, либо не нажмёт кнопку Cancel (ESC). 135 | // Предусматривать обработку нечисловых строк в этой задаче необязательно. 136 | 137 | 138 | 139 | // Task 19 140 | // Переписать следующий код используя switch 141 | // var a = +prompt('a?', ''); 142 | // if (a == 0) { 143 | // alert( 0 ); 144 | // } 145 | // if (a == 1) { 146 | // alert( 1 ); 147 | // } 148 | // if (a == 2 || a == 3) { 149 | // alert( '2,3' ); 150 | // } 151 | 152 | 153 | // Task 20 154 | // Объявите переменную и проинициализируйте ее строчным значением в переменном 155 | // регистре. (Например так "таООооОддОО") 156 | // Напишите код, который преобразует эту строку к виду: 157 | // первая буква в верхнем регистре, остальные буквы в нижнем регистре. 158 | // Выведите результат работы в консоль 159 | // Используйте: toUpperCase/toLowerCase, slice. 160 | 161 | 162 | 163 | // Task 21 164 | // Напишите код, который выводит в консоль true, если строка str содержит 165 | // „viagra“ или „XXX“, а иначе false. 166 | // Тестовые данные: 'buy ViAgRA now', 'free xxxxx' 167 | 168 | 169 | 170 | // Task 22 171 | // Напишите код, который проверяет длину строки str, и если она превосходит 172 | // maxlength – заменяет конец str на "...", так чтобы ее длина стала равна maxlength. 173 | // Результатом должна быть (при необходимости) усечённая строка. 174 | // Выведите строку в консоль 175 | // Тестовые данные: 176 | // "Вот, что мне хотелось бы сказать на эту тему:", 20 177 | // "Всем привет!", 20 178 | 179 | 180 | 181 | // Task 23 182 | // Напишите код, который из строки $100 получит число и выведите его в консоль. 183 | 184 | 185 | // Task 24 186 | // Напишите код, который проверит, является ли переменная промисом 187 | 188 | 189 | -------------------------------------------------------------------------------- /app/08.async-functions.js: -------------------------------------------------------------------------------- 1 | console.log('Topic: Async Functions'); 2 | // Task 01 3 | // RU: Создайте асинхронную функцию f1, используя FDS (Function Declaration Statement). 4 | // Функция должна принимать два параметра a и b и возвращать сумму a+b. 5 | // Выведите значение, которое вернет функция в консоль. 6 | // Обработаете промис и выведите значение в консоль. 7 | // EN: Create an async function f1 as a Function Declaration Statement. 8 | // The function should take two parameters a and b and return a sum a+b. 9 | // Display the result of function in the console. 10 | // Process a promise and display value in the console. 11 | 12 | // Task 02 13 | // RU: Создайте асинхронную функцию f2, используя FDE (Function Definition Expression). 14 | // Функция должна возвращать 'Promise Data', используя Promise.resolve() 15 | // Выведите значение, которое вернет функция в консоль. 16 | // Обработаете промис и выведите значение в консоль. 17 | // EN: Create an async function f2 as a Function Definition Expression. 18 | // The function should return the string 'Promise data' using Promise.resolve() method. 19 | // Display the result of function in the console. 20 | // Process a promise and display value in the console. 21 | 22 | // Task 03 23 | // RU: Создайте класс C1. Добавьте асинхронный метод f3. 24 | // Метод должен генерить исключение 'Error occurs in f3 method'. 25 | // Создайте экземпляр класса и вызовите метод f3. 26 | // Обработаете промис. 27 | // EN: Create a class C1. Add async method f3. 28 | // Method should throw an exception 'Error occurs in f3 method'. 29 | // Create an instance of the class and call the method f3. 30 | // Process a promise and display value in the console. 31 | 32 | // Task 04 33 | // RU: Cоздайте функцию makeRequest, используя FDS (Function Declaration Statement). 34 | // Функция должна принимать один параметр - url и возвращать промис, 35 | // который перейдет в состояние resolved через 2с. и вернет значение параметра. 36 | // Первой строкой в функции выведите сообщение 'makeRequest is called'. 37 | // Cоздайте функцию f4, используя FDS (Function Declaration Statement). 38 | // Функция должна вызвать функцию makeRequest, получить результат ее работы и вывести в консоль. 39 | // EN: Create a functiom makeRequest as a Function Declaration Statement. 40 | // The function should take one parameter - url and return a promise, 41 | // which should be resolved after 2s and it should return the value of the parameter url. 42 | // The first line of code in the function should display message 'makeRequest is called' in the console. 43 | // Create a function f4 as a Function Declaration Statement. 44 | // The function f4 should call the function makeRequest, get its result and display it in the console. 45 | 46 | // Task 05 47 | // RU: Внесите изменения в функцию f4 из предыдущего задания так, чтобы в консоле появилось 48 | // значение переданого параметра в функцию makeRequest. 49 | // EN: Make changes to the function f4 from the previous task. This function should display the value 50 | // of the parameter of the function makeRequest in the console. 51 | 52 | // Task 06 53 | // RU: Cоздайте асинхронную функцию f6, используя FDS (Function Declaration Statement). 54 | // Функция должна вызвать два раза функцию makeRequest с разными значениями параметра. 55 | // Перед вызовом и после каждого вызова makeRequest функция должна выводить в консоль любое сообщение. 56 | // Создать и вернуть массив, который должен содержать значения переданые функции makeRequest. 57 | // Обработаете результат работы функции f6. 58 | // EN: Create an async function f6 as a Function Declaration Statement. 59 | // This function should call the function makeRequest two times with different values of its parameter. 60 | // The function f6 should display any message in the console before and after each call 61 | // of the function makeRequest. 62 | // Create and return the array from the function f6, which should contains the values of the 63 | // parameter of the function makeRequest. 64 | // Process the result of the function f6. 65 | 66 | // Task 07 67 | // RU: Измените асинхронную функцию f6 из предыдущего задания так, чтобы вызовы функции 68 | // makeRequest выполнялись паралельно. 69 | // EN: Make changes to the async function f6 from the previous task. This function should 70 | // call the function makeRequest with different values of its parameter simultaneously. 71 | 72 | // Task 08 73 | // RU: Создайте масив урлов ['http://a', 'http://b']. 74 | // Создайте функцию sendRequest, которая принимает один параметр - url. 75 | // Функция в первой строке должна выводить в консоль сообщение 'sendRequest is called' 76 | // и возвращать через 2 с для первого урла объект { name: 'Ann' }, а для второго 77 | // урла объект { age: 16 }. 78 | // Создайте асинхронную функцию f8 которая должна вызвать функцию sendRequest для каждого урла 79 | // и вернуть объект {name: 'Ann', age: 16} 80 | // Обработайте результат работы функции f8 81 | // EN: Create the array of urls ['http://a', 'http://b']. 82 | // Create the function sendRequest which should take one parameter - url. 83 | // The function should display the message 'sendRequest is called' in the console 84 | // in its first line of code. Then the function should return the object { name: 'Ann' } for the 85 | // first url after 2s and the object { age: 16 } for the second url after 2s. 86 | // Create the async function f8, which should call the function sendRequest with each value 87 | // from the array and return the object {name: 'Ann', age: 16}. 88 | // Process the reuslt of the function f8 89 | -------------------------------------------------------------------------------- /app/04.objects.js: -------------------------------------------------------------------------------- 1 | console.log('Topic: Objects'); 2 | 3 | // Task 01 4 | // RU: Создать функцию-конструктор Tune(title, artist) для создания объектов 5 | // с публичными свойствами title, artist и методом concat(). 6 | // Метод должен возвращать конкатенацию значений свойств title и artist. 7 | // Создать несколько объектов. Вызвать их метод concat(). 8 | // EN: Create function-constructor Tune(title, artist) for creating objects 9 | // with public properties title, artist and method concat(). 10 | // Method should return the concatenation of values of properties title and artist. 11 | // Create a few objects. Call their method concat(). 12 | 13 | // Task 02 14 | // RU: Создать функцию-конструктор Tune(title, artist) для создания объектов 15 | // с приватными свойствами title, artist и публичным методом concat(). 16 | // Метод должен возвращать конкатенацию значений свойств title и artist. 17 | // Создать несколько объектов. Вызвать их метод concat(). 18 | // EN: Create function-constructor Tune(title, artist) for creating objects 19 | // with private properties title, artist and method concat(). 20 | // Method should return the concatenation of values of properties title and artist. 21 | // Create a few objects. Call their method concat(). 22 | 23 | // Task 03 24 | // RU: Расширить прототип объекта String методом exclaim() если его нет в прототипе. 25 | // Метод должен добавлять знак восклицания к строке и выводить ее в консоль. 26 | // EN: Extend the prototype of object String with the method exclaim(), if it doesn't exist. 27 | // Method should add exclaimation mark to the string and display it in the console. 28 | 29 | // Task 04 30 | // RU: Создать функцию-конструктор Book(title, author). 31 | // Добавить два метода: getTitle, getAuthor. 32 | // Создать функцию-конструктор TechBook(title, author, category). 33 | // Передать значения title, author функции-конструктору Book. 34 | // Добавить два метода: getCategory, getBook – возвращает строку со значениями параметров. 35 | // Для реализации наследования используйте: 36 | // 1. Object.create() 37 | // 2. Class 38 | // EN: Create function-constructor Book(title, author). 39 | // Add two methods: getTitle, getAuthor. 40 | // Create function-constructor TechBook(title, author, category). 41 | // Pass the value of title, author to the function-constructor Book. 42 | // Add two methods: getCategory, getBook - returns the string with values of all parameters. 43 | // Implement inheritance using: 44 | // 1. Object.create() 45 | // 2. Class 46 | 47 | // Task 05 48 | // RU: Создайте класс Shape со статическим свойством count. 49 | // Проинициализируйте это свойство 0. 50 | // В конструкторе класса увеличивайте count на 1. 51 | // Создайте производный класс Rectangle. Добавьте метод для подсчета площади. 52 | // Создайте несколько объектов. Выведите в консоль количество созданных объектов. 53 | // EN: Create class Shape with static property count. 54 | // Initialize the property count with 0. 55 | // Increment the value of count by 1 in the constructor. 56 | // Create derived class Rectangle. Add method to calculate area. 57 | // Create a few objects. Display the number of created objects in the console. 58 | 59 | // Task 06 60 | // RU: Создать функцию-конструктор Person() для конструирования объектов. 61 | // Добавить два метода: setFirstName() и setLastName(). 62 | // Методы должны вызываться в цепочке, например obj.setFirstName(...).setLastName(...) 63 | // EN: Create function-constructor Person() for creating objects. 64 | // Add two methods: setFirstName() и setLastName(). 65 | // These methods should be called in chain like this obj.setFirstName(...).setLastName(...) 66 | 67 | // Task 07 68 | // RU: Cоздать объект data и сконфигурирвать его свойства: 69 | // 1. id: значение = 1, изменяемое. 70 | // 2. type: значение = 'primary', перечисляемое 71 | // 3. category: getter возвращает значение поля _category, 72 | // setter устанавливает значение поля _category, перечисляемое, конфигурируемое. 73 | // Используя for-in вывести свойства объекта в консоль 74 | // EN: Create an object data and configure its properties: 75 | // 1. id: value = 1, writable 76 | // 2. type: value = 'primary', enumerable 77 | // 3. category: getter returns the value of the property _category, 78 | // setter sets the value if the property _category, enumerable, configurable. 79 | // Using for-in display properties of an object in the console. 80 | 81 | // Task 08 82 | // RU: Создать литерал объекта с двумя свойствами. Запретить расширять объект. 83 | // EN: Create object literal with two properties. Deny extend the object. 84 | 85 | // Task 09 TodoList Application 86 | // RU: Создать классы 'задача' и 'список задач' со следющим функционалом: 87 | // 1. Добавить задачу в список 88 | // 2. Получить и вывести в консоль список всех задач 89 | // в формате "[new] Task 1", "[completed] Task2" 90 | // 3. Отметить указанную задачу как выполненную 91 | // 4. Удалить задачу из списка 92 | // 5. Отсортировать задачи по алфавиту по возрастанию или по убыванию 93 | // 6. Очистить список задач 94 | // EN: Create classes 'task' and 'task list' with the following features: 95 | // 1. Add task to the list 96 | // 2. Get and display the list of all tasks in the console 97 | // using the following format "[new] Task 1", "[completed] Task2" 98 | // 3. Check task as a completed task 99 | // 4. Remove task from the list of tasks. 100 | // 5. Sort tasks alphabetically in asc or desc order 101 | // 6. Clear the list of tasks. 102 | 103 | // Task 10 Transform Array into Map (Maksym Koval1 ) 104 | // RU: Преобразовать массив в меп по образцу 105 | // EN: Transform array into map according to pattern 106 | // const entries = [ 107 | // { key:'FIRST_KEY', value: 'FIRST_KEY_VALUE'}, 108 | // { key:'FIRST_KEY', value: 'FIRST_KEY_NOT_SAME_VALUE'}, 109 | // { key:'SECOND_KEY', value:'value1'}, 110 | // { key:'SECOND_KEY', value:'value4'}, 111 | // { key:'THIRD_KEY', value: 'value6'}, 112 | // { key:'FOURTH_KEY', value:'value1'}, 113 | // ]; 114 | 115 | // ==> 116 | 117 | // Map { 118 | // 'FIRST_KEY': ['FIRST_KEY_VALUE', 'FIRST_KEY_NOT_SAME_VALUE'], 119 | // 'SECOND_KEY': ['value1', 'value4'], 120 | // 'THIRD_KEY': 'value6', 121 | // 'FOURTH_KEY': 'value1' 122 | // } 123 | -------------------------------------------------------------------------------- /app/03.arrays.js: -------------------------------------------------------------------------------- 1 | console.log('Topic: Arrays'); 2 | 3 | // Task 01 4 | // RU: Создать массив. Получить последний элемент массива. 5 | // 1. Без удаления этого элемента из массива. 6 | // 2. С удалением этого элемента из массива 7 | // Выведите массивы в консоль 8 | // EN: Create an array of any elements. Get the last element from this array. 9 | // 1. without deleting this element from an array; 10 | // 2. with deleting this element from an array. 11 | // Display them in the console. 12 | 13 | // Task 02 14 | // RU: Создать массив любых элементов. Добавить элемент в конец массива. 15 | // 1. Модифицировать текущий массив 16 | // 2. Создать новый массив 17 | // Выведите массивы в консоль 18 | // EN: Create an array of any elements. Add new element to the end of this array. 19 | // 1. mutate current array; 20 | // 2. create a new array. 21 | // Display them in the console. 22 | 23 | // Task 03 24 | // RU: Создать массив любых элементов. Вставить новый элемент под индексом 3. 25 | // 1. Модифицировать текущий массив 26 | // 2. Создать новый массив 27 | // Выведите массивы в консоль 28 | // EN: Create an array of any elements. Insert a new element with index 3. 29 | // 1. mutate current array; 30 | // 2. create a new array. 31 | // Display them in the console. 32 | 33 | // Task 04 34 | // RU: Создать массив чисел в диапазоне от 0 до 100. 35 | // Подсчитать и вывети сумму тех элементов, которые больше 50. 36 | // EN: Create an array of numbers in the range from 0 to 100. 37 | // Calculate and display the sum of the elements, which are greater than 50. 38 | 39 | // Task 05 40 | // RU: Создать массив строк. На основе этого массива создать строку – 41 | // объдинить все элементы массива, используя определенный разделитель. 42 | // EN: Create an array of strings. Create a string on the basis of this array. 43 | // This string should contain all elements from an array separated by certain delimeter. 44 | 45 | // Task 06 46 | // RU: Создать массив чисел от 1 до 20 в случайном порядке. 47 | // Отcортировать массив по возрастанию. Вывести его в консоль. 48 | // Получить массив, отсортрованный в обратном порядке, и вывести его в консоль. 49 | // EN: Create an array of numbers in the range from 1 to 20 in random order. 50 | // Sort this array in ascending order. Display it in the console. 51 | // Create a copy of the previous array in reverse order. Display it in the console. 52 | 53 | // Task 07 54 | // RU: Создать массив [3, 0, -1, 12, -2, -4, 100_001, 0, 7, 2] 55 | // На его основе создать новый массив [-1, -2, -4, 0, 0, 3, 12, 100_001, 7, 2]. 56 | // первая часть - отрицательные числа в том же порядке 57 | // вторая часть - нули 58 | // третья часть - положительные числа в том же порядке. 59 | // EN: Create the array: [3, 0, -1, 12, -2, -4, 100_001, 0, 7, 2] 60 | // Use this array and create new one: [-1, -2, -4, 0, 0, 3, 12, 100_001, 7, 2]. 61 | // First part - negative values from the original array in the same order, 62 | // Next part - zeroes 63 | // Last part - positive values from the original array in the same order. 64 | 65 | // Task 08 66 | // RU: 1. Создайте массив styles с элементами "Jazz", "Blues". 67 | // 2. Добавьте в конец значение "Rock-n-Roll". 68 | // 3. Замените предпоследнее значение с конца на "Classics". 69 | // 4. Удалите первый элемент из массива и выведите его в консоль. 70 | // 5. Добавьте в начало два элемента со значениями "Rap" и "Reggae". 71 | // 6. Выведите массив в консоль. 72 | // EN: 1. Create an array styles with two elements "Jazz", "Blues". 73 | // 2. Add new element "Rock-n-Roll" to the end of the array. 74 | // 3. Replace the last but one element with new value "Classics". 75 | // 4. Remove the first element from the array and display it in the console. 76 | // 5. Add two new elements "Rap" and "Reggae" at the begining of the array. 77 | // 6. Display an array in the console. 78 | 79 | // Task 09 80 | // RU: Подсчитать в строке "dskjdhfkjshdfkjhsdkjureyteiruyiqywehjkh" 81 | // отдельно количество букв r, k, t и вывести в консоль. 82 | // EN: Calculate the number of letters r, k, t in this string 83 | // "dskjdhfkjshdfkjhsdkjureyteiruyiqywehjkh" and display them in the console. 84 | 85 | // Task 10. Aleh Hupalo 86 | // RU: Создать строку содержащую буквы и цифры. 87 | // Получить максимальное число, состоящее из цифр, существующих в созданной строке. 88 | // Тестовые данные: 89 | // - 'sd231gt04' -> 43210 90 | // - '00HT00jtr' -> 0 91 | // EN: Create a string containing letters and digits. 92 | // Get the maximum number consisting of digits existing in the created string. 93 | // Test data: 94 | // - 'sd231gt04' -> 43210 95 | // - '00HT00jtr' -> 0 96 | 97 | 98 | // Task 11. (Maksym Koval1 ) 99 | // RU: Есть строка, представляющая rgb цвет, например 'rgb(255, 255, 78)'. 100 | // Необходимо извлечь из строки номера цветов и вывести их в консоль через разделитель "-". 101 | // EN: There is a string representing the rgb color, for example 'rgb(255, 255, 78)'. 102 | // It is necessary to extract the numbers of colors from the string and output 103 | // them to the console through the "-" separator. 104 | 105 | 106 | // Task 12 107 | // RU: Создать массив любых элементов. 108 | // Получить случайный элемент из массива и вывести его в консоль. 109 | // EN: Create an array of any elements. 110 | // Get the random element from this array and display it in the console. 111 | 112 | // Task 13 113 | // RU: Создать двумерный массив: 114 | // 1 2 3 115 | // 4 5 6 116 | // 7 8 9 117 | // Вывести его в консоль. 118 | // Преобразовать массив из предыдущего задания в одномерный. 119 | // Вывести его в консоль 120 | // EN: Create two-dementional array: 121 | // 1 2 3 122 | // 4 5 6 123 | // 7 8 9 124 | // Display it in the console. 125 | // Transform an array from two-dementional into one-dementional array. 126 | // Display it in the console. 127 | 128 | // Task 14 129 | // RU: Создать массив любых элементов. 130 | // Найти индекс указаного элемента в массиве и вывести его в консоль. 131 | // EN: Create an array of any elements. 132 | // Find the index of a particular element in the array and display it in the console. 133 | 134 | // Task 15 135 | // RU: Создать массив с дублями элементов. На его основе создать новый массив 136 | // уникальных элементов (удалить дубли). 137 | // Вывести новый массив в консоль. 138 | // EN: Create an array with duplicate elements. Create new one on the basis of the originl array. 139 | // Remove duplicated elements. 140 | // Display it in the console. 141 | 142 | // Task 16 143 | // RU: Создать массив с дублями. Найти первый элемент, который дублируется. 144 | // Заменить этот элемент и все его копии на символ '*'. 145 | // Вывести массив в консоль. 146 | // EN: Create an array with duplicate elements. Find first duplicated element. 147 | // Replace this element and all its copies with symbol '*'. 148 | // Display it in the console. 149 | 150 | // Task 17 151 | // RU: Создать массив целых чисел. На его основе создать массивы – представления 152 | // этих же чисел в бинарном, восьмеричном и шестнадцатеричном виде. 153 | // Вывести эти массивы в консоль. 154 | // EN: Create an array of integer numbers. Create 3 new ones on the basis of the originl array. 155 | // First array contains the binary representation of the elements from the original array. 156 | // Second array contains the octal representation of the elements from the original array. 157 | // Third array contains the hexadecimal representation of the elements from the original array. 158 | // Display them in the console. 159 | 160 | // Task 18 161 | // RU: Получить из строки 'a big brown fox jumps over the lazy dog' массив слов, 162 | // который содержит элементы, длина которых не больше 3 символа. 163 | // Вывести массив в консоль. 164 | // EN: Get the array of words from the string 'a big brown fox jumps over the lazy dog'. 165 | // This array should contain only words, the length of which is 3 or less characters. 166 | // Display it in the console. 167 | 168 | // Task 19 169 | // RU: Создать массив, который содержит строки и числа. 170 | // Проверить, содержит ли массив только строки. 171 | // Вывети результат в консоль 172 | // EN: Create an array of numbers and strings. 173 | // Check whether this array contains only strings. 174 | // Display the result in the console. 175 | 176 | // Task 20 177 | // RU: Создать отсортированный массив чисел. 178 | // Реализовать функцию binarySearch(arr, value), которая принимает массив 179 | // и значение и возвращает индекс значения в массиве или -1. 180 | // Функция должна использовать бинарный поиск. 181 | // Вывести результат в консоль. 182 | // EN: Create an array of numbers in sort order. 183 | // Implement function binarySearch(arr, value), which takes an array 184 | // and a value and returns the index of this value in the array or -1. 185 | // Function should use binary search. 186 | // Display the result in the console. 187 | 188 | -------------------------------------------------------------------------------- /app/06.functions.js: -------------------------------------------------------------------------------- 1 | console.log('Topic: Functions'); 2 | 3 | // Task 1. FDS 4 | // RU: Создайте функцию conc, которая должна конкатенировать значения 5 | // двух параметров a и b и возвращать строку. 6 | // Используйте Function Declaration Statement (FDS). 7 | // Вызовите функцию до ее объявления. 8 | // Тестовые данные: 9 | // a = '1', b = '1', result = '11' 10 | // a = 1, b = 1, result = '11' 11 | // EN: Create a function conc, which should concatenate the values 12 | // of two parameters a and b and return a string. 13 | // Use Function Declaration Statement (FDS). 14 | // Call a function before it declaration. 15 | // Test data: 16 | // a = '1', b = '1', result = '11' 17 | // a = 1, b = 1, result = '11' 18 | 19 | // Task 2. FDE 20 | // RU: Создайте функцию comp, которая должна сравнивать значения 21 | // двух параметров a и b и возвращать 1, если они равны и -1, если они не равны. 22 | // Используйте Function Definition Expression (FDE). 23 | // Вызовите функцию до ее объявления. 24 | // Тестовые данные: 25 | // a = 'abc', b = 'abc', result = 1 26 | // a = 'abC', b = 'abc', result = -1 27 | // EN: Create a function comp, which should compare the values 28 | // of two parameters a and b, and return 1, when they equal and return -1, 29 | // when they are not equal. 30 | // Use Function Definition Expression (FDE). 31 | // Call a function before it declaration. 32 | // Test data: 33 | // a = 'abc', b = 'abc', result = 1 34 | // a = 'abC', b = 'abc', result = -1 35 | 36 | // Task 3. AF 37 | // RU: Создайте анонимную функцию, которая должна 38 | // выводить сообщение 'message in console' в коноль. 39 | // Используйте ее как обработчик события click для кнопки. 40 | // EN: Create an anonymous function, which should display 41 | // message 'message in console' in console. 42 | // Use it as an event handler of event click of the button. 43 | 44 | // Task 4. NFE 45 | // RU: Создайте функцию fibo, которая должна вычислять числа Фибоначчи по формуле 46 | // F0 = 0, F1 = 1, Fn = Fn-1 + Fn-2. 47 | // Создайте функцию factorial, которая должна вычислять факториал числа по формуле 48 | // Fn = 1 * 2 *..*n. 49 | // Используйте Named Function Expression (NFE). 50 | // EN: Create a function fibo should calculate Fibonacci numbers according to the formula 51 | // F0 = 0, F1 = 1, Fn = Fn-1 + Fn-2. 52 | // Create a function factorial which should calculate factorial of a number n 53 | // according to the formula Fn = 1 * 2 *..*n. 54 | // Use Named Function Expression (NFE). 55 | 56 | // Task 5. FC 57 | // RU: Объявите две строчные переменные: params и body и проинициализируйте 58 | // их строчными значениями, которые представляют список параметров и тело будущей функции. 59 | // Создайте функцию, используя эту информацию с помощью Function Constructor (FC). 60 | // Вызовите эту функцию. 61 | // EN: Declare two string variables: params and body and initialize them with string values, 62 | // which represent the list of parameters and the body of future function. 63 | // Create function using these variables with help of Function Constructor (FC). 64 | // Call this function. 65 | 66 | // Task 6. ArF 67 | // RU: Объявите массив arr = [1, 8, 3, 5, 12, 7, 9, 11] 68 | // Используя стрелочные функции создайте новый массив из элементов elem * elem, 69 | // которые меньше 100 и отсортируйте его по возрастанию. 70 | // Выведите результат в консоль. 71 | // EN: Declare an array arr = [1, 8, 3, 5, 12, 7, 9, 11] 72 | // Using arrow functions create new array which contains elem * elem. 73 | // These elements should be less than 100, sort it in ascending order. 74 | // Display the result in the console. 75 | 76 | // Task 7. IIFE 77 | // RU: Создайте конструкцию, с помощью которой выполниться выше реализованная 78 | // функция conc. 79 | // EN: Create a construction which allows to run the above function conc. 80 | 81 | // Task 8. Arguments Object, Rest 82 | // RU: Создайте функцию parts, которая принимает неизвестное количество параметров. 83 | // Каждый параметр – это группа предложений. 84 | // Функция должна вырезать из параметра подстроку, начиная с символа двоеточие (:) 85 | // и заканчивая символом точка (.). 86 | // Функция должна возвращать массив подстрок. 87 | // Используйте Function Definition Expression (FDE). 88 | // Тестовые данные: 89 | // param1 = "This is the first sentence. This is a sentence with a list of items: 90 | // cherries, oranges, apples, bananas." 91 | // param2 = "This is the second sentence. This is a sentence with a list of items: 92 | // red, blue, yellow, black." 93 | // result = ["cherries, oranges, apples, bananas", "red, blue, yellow, black"]. 94 | // EN: Create a function parts, which takes unknown quantity of parameters. 95 | // Each parameter is a group of sentances. 96 | // The function should cut out the substring from the parameter, starting with the colon (:) 97 | // and ending with a period (.) character. 98 | // The function should return an array of substrings. 99 | // Use Function Definition Expression (FDE). 100 | // Test Data: 101 | // param1 = "This is the first sentence. This is a sentence with a list of items: 102 | // cherries, oranges, apples, bananas." 103 | // param2 = "This is the second sentence. This is a sentence with a list of items: 104 | // red, blue, yellow, black." 105 | // result = ["cherries, oranges, apples, bananas", "red, blue, yellow, black"]. 106 | 107 | 108 | // Task 9. Optional Arguments 109 | // RU: Создайте функцию find(testString, test), которая должна возвращать позицию 110 | // строки test в строке testString. 111 | // Если второй параметр не задан, используйте test = testString. 112 | // Используйте Function Definition Expression (FDE). 113 | // Тестовые данные: 114 | // testString = 'abc', test ='b', result = 1 115 | // testString = 'abc', result = 0 116 | // testString = 'abc', test = 'd', result = -1 117 | // testString = 'abc', test='a', test2='b', result = 0 118 | // EN: Create a function find(testString, test), which should return the position 119 | // of test string within testString. 120 | // If the second parameter is omitted, use default value test = testString. 121 | // Use Function Definition Expression (FDE). 122 | // Test Data: 123 | // testString = 'abc', test ='b', result = 1 124 | // testString = 'abc', result = 0 125 | // testString = 'abc', test = 'd', result = -1 126 | // testString = 'abc', test='a', test2='b', result = 0 127 | 128 | // Task 10. Function as an Object 129 | // RU: Создайте функцию str(), которая принимает один строчный параметр и 130 | // выводит в консоль 'String is non empty', если параметр - непустая строка и 131 | // 'String is empty', если параметр – пустая строка. 132 | // Создайте функцию str.isNonEmptyStr(), как свойство функции str. Эта функция должна 133 | // принимать один параметр и возвращать true, если параметр непустая строка, 134 | // иначе false. Используйте эту функцию для реализации условия в основной функции. 135 | // Тестовые данные: 136 | // str.isNonEmptyStr(), result = false 137 | // str.isNonEmptyStr(''), result = false 138 | // str.isNonEmptyStr('a'), result = true 139 | // str.isNonEmptyStr(1), result = false 140 | // str(), console.log('String is empty') 141 | // str('a'), console.log('String is non empty') 142 | // EN: Create a function str(), which takes one string parameter and display in the console 143 | // string 'String is non empty' if the paramer is not empty string, otherwise it 144 | // should display 'String is empty'. 145 | // Create a function str.isNonEmptyStr() as a property of function str. This function 146 | // should take one parameter and return true, when the value of parameter is not empty 147 | // string, otherwise it should return false. Use this function to implement if statement 148 | // in the str() funtion. 149 | // Test Data: 150 | // str.isNonEmptyStr(), result = false 151 | // str.isNonEmptyStr(''), result = false 152 | // str.isNonEmptyStr('a'), result = true 153 | // str.isNonEmptyStr(1), result = false 154 | // str(), console.log('String is empty') 155 | // str('a'), console.log('String is non empty') 156 | 157 | // Task 11. Function as a Parameter 158 | // RU: Создайте функцию toConsole с одним параметром. Функция должна выводить 159 | // значение параметра в консоль. 160 | // Создайте функцию toAlert с одним параметром. Функция должна выводить значение 161 | // параметра используя alert(). 162 | // Создайте функцию splitToWords с двумя параметрами: msg и callback. 163 | // Функция должна разделять строку на слова и использовать колбек для отображения слов. 164 | // Если второй параметр не задан, функция должна возвращать массив слов. 165 | // EN: Create a function toConsole with one parameter. The function should display 166 | // the value of the parameter in the console. 167 | // Create a function toAlert with one parameter. The function should display 168 | // the value of the parameter using alert. 169 | // Create a function splitToWords, which takes two parameters: msg и callback. 170 | // The function should split the value of parameter msg by the words and use callback 171 | // to display these words. 172 | // If the second parameter is omitted, the function should return array of words. 173 | // Test Data: 174 | // splitToWords("My very long text msg", toConsole); 175 | // result: 176 | // My 177 | // very 178 | // long 179 | // text 180 | // msg 181 | // splitToWords("My very long text msg", toAlert); 182 | // result = alert(My), …. 183 | // console.log( splitToWords("My very long text msg") ); 184 | // result = ['My', 'very', 'long', 'text', 'msg'] 185 | 186 | 187 | // Task 12. Function as a Result 188 | // RU: Создайте функцию copyright, которая должна возвращать другую функцию с 189 | // одним параметром. Возращаемая функция должна прибавлять знак © ('\u00A9') 190 | // вначале своего параметра и возвращать результат. Объявите этот знак в функции copyright. 191 | // Тестовые данные: 192 | // console.log( copyright()('EPAM') ); result = © EPAM. 193 | // EN: Create a function copyright, which should return another function with one parameter. 194 | // This returned function should prepend sign © ('\u00A9') to its parameter and 195 | // return the result. Declare the sign © ('\u00A9') inside copyright function. 196 | // Test Data: 197 | // console.log( copyright()('EPAM') ); result = © EPAM. 198 | 199 | // Task 13. Function as a Result 200 | // RU: Задание аналогично предыдущему, но в этот раз функция copyright получает знак 201 | // как свой параметр. 202 | // EN: This task is similar to the previous one, but in this case the function copyright takes 203 | // one parameter - sign (© ('\u00A9')). 204 | 205 | // Task 14. Function as a Method 206 | // RU: Создайте литерал объекта employee со следующими свойствами: 207 | // name: 'Ann', 208 | // work – функция, которая выводит в консоль сообщение "I am Ann. I am working..." 209 | // Тестовые данные 210 | // employee.work() результат в консоле "I am Ann. I am working..." 211 | // EN: Create an object literal employee with the following properties: 212 | // name: 'Ann', 213 | // work – function, which displays in the console the following string 214 | // "I am Ann. I am working..." 215 | // Test Data: 216 | // employee.work() result in the console "I am Ann. I am working..." 217 | 218 | // Task 15. Borrow Method 219 | // RU: Создайте литерал объекта person со свойством name. 220 | // Вызовите метод work объекта employee из предыдущего задания. 221 | // EN: Create an object literal person with property name. 222 | // Call the method work of the object employee from the previous task. 223 | 224 | // Task 16. Memoization 225 | // RU: Создать функцию fiboMemo для вычисления чисел Фибоначчи по формуле 226 | // F0 = 0, F1 = 1, Fn = Fn-1 + Fn-2. Функция должна хранить те значения, 227 | // которые она уже вычисляла. Используя методы console.time(), console.timeEnd() 228 | // определите время вычисления функции fibo и функции fiboMemo. 229 | // EN: Create a function fiboMemo for calculating Fibonacci numbers according to the formula 230 | // F0 = 0, F1 = 1, Fn = Fn-1 + Fn-2. The function should store the values computed earlier. 231 | // Using methods console.time(), console.timeEnd() calculate the time for function fibo 232 | // and fiboMemo. 233 | --------------------------------------------------------------------------------