commit 6c83e0ad705b93bf05d56276924412180527bc89 Author: codevadym Date: Fri Jan 17 01:00:07 2025 +0100 dz chapter 1 diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..fbca2c1 Binary files /dev/null and b/.DS_Store differ diff --git a/01-variable-declaration/finish.js b/01-variable-declaration/finish.js new file mode 100644 index 0000000..8cf422a --- /dev/null +++ b/01-variable-declaration/finish.js @@ -0,0 +1,9 @@ +/** ЗАДАЧА 1 - Объявление переменной + * + * 1. Объявите переменную "myCountry" и присвойте ей значение - + * строку с вашей страной + * + * 2. В дальнейшем не планируется присваивание нового значения этой переменной + * + * 3. Выведите значение переменной в консоль + */ diff --git a/01-variable-declaration/solution.js b/01-variable-declaration/solution.js new file mode 100644 index 0000000..cef4028 --- /dev/null +++ b/01-variable-declaration/solution.js @@ -0,0 +1,13 @@ +/** ЗАДАЧА 1 - Объявление переменной + * + * 1. Объявите переменную "myCountry" и присвойте ей значение - + * строку с вашей страной + * + * 2. В дальнейшем не планируется присваивание нового значения этой переменной + * + * 3. Выведите значение переменной в консоль + */ + +const myCountry = 'Ukraine' + +console.log(myCountry) diff --git a/01-variable-declaration/start.js b/01-variable-declaration/start.js new file mode 100644 index 0000000..a2ca696 --- /dev/null +++ b/01-variable-declaration/start.js @@ -0,0 +1,13 @@ +/** ЗАДАЧА 1 - Объявление переменной + * + * 1. Объявите переменную "myCountry" и присвойте ей значение - + * строку с вашей страной + * + * 2. В дальнейшем не планируется присваивание нового значения этой переменной + * + * 3. Выведите значение переменной в консоль + */ + + +const myCountry = 'USSR'; +console.log(myCountry); \ No newline at end of file diff --git a/02-value-reassignment/finish.js b/02-value-reassignment/finish.js new file mode 100644 index 0000000..c8f27d6 --- /dev/null +++ b/02-value-reassignment/finish.js @@ -0,0 +1,12 @@ +/** ЗАДАЧА 2 - Присваивание нового значения переменной + * + * 1. Объявите переменную "isStudent" без присваивания значения + * + * 2. Присвойте переменной "isStudent" правдивое логическое значение + * + * 3. Выведите значение переменной в консоль + * + * 4. Присвойте переменной "isStudent" ложное логическое значение + * + * 5. Выведите значение переменной в консоль + */ diff --git a/02-value-reassignment/solution.js b/02-value-reassignment/solution.js new file mode 100644 index 0000000..3f13598 --- /dev/null +++ b/02-value-reassignment/solution.js @@ -0,0 +1,22 @@ +/** ЗАДАЧА 2 - Присваивание нового значения переменной + * + * 1. Объявите переменную "isStudent" без присваивания значения + * + * 2. Присвойте переменной "isStudent" правдивое логическое значение + * + * 3. Выведите значение переменной в консоль + * + * 4. Присвойте переменной "isStudent" ложное логическое значение + * + * 5. Выведите значение переменной в консоль + */ + +let isStudent + +isStudent = true + +console.log(isStudent) + +isStudent = false + +console.log(isStudent) diff --git a/02-value-reassignment/start.js b/02-value-reassignment/start.js new file mode 100644 index 0000000..95d18f1 --- /dev/null +++ b/02-value-reassignment/start.js @@ -0,0 +1,18 @@ +/** ЗАДАЧА 2 - Присваивание нового значения переменной + * + * 1. Объявите переменную "isStudent" без присваивания значения + * + * 2. Присвойте переменной "isStudent" правдивое логическое значение + * + * 3. Выведите значение переменной в консоль + * + * 4. Присвойте переменной "isStudent" ложное логическое значение + * + * 5. Выведите значение переменной в консоль + */ + +var isStudent; +isStudent = true; +console.log(isStudent); +isStudent = false; +console.log(isStudent); \ No newline at end of file diff --git a/03-numbers-multiplication/finish.js b/03-numbers-multiplication/finish.js new file mode 100644 index 0000000..4757b85 --- /dev/null +++ b/03-numbers-multiplication/finish.js @@ -0,0 +1,9 @@ +/** ЗАДАЧА 3 - Умножение двух чисел + * + * 1. Объявите две переменные и присвойте им любые числа + * + * 2. Объявите еще одну переменную и присвойте ей результат + * умножения двух предыдущих переменных + * + * 3. Выведите значение последней переменной в консоль + */ diff --git a/03-numbers-multiplication/solution.js b/03-numbers-multiplication/solution.js new file mode 100644 index 0000000..928c613 --- /dev/null +++ b/03-numbers-multiplication/solution.js @@ -0,0 +1,16 @@ +/** ЗАДАЧА 3 - Умножение двух чисел + * + * 1. Объявите две переменные и присвойте им любые числа + * + * 2. Объявите еще одну переменную и присвойте ей результат + * умножения двух предыдущих переменных + * + * 3. Выведите значение последней переменной в консоль + */ + +const myNumber1 = 8 +const myNumber2 = 15 + +const mult = myNumber1 * myNumber2 + +console.log(mult) diff --git a/03-numbers-multiplication/start.js b/03-numbers-multiplication/start.js new file mode 100644 index 0000000..080a223 --- /dev/null +++ b/03-numbers-multiplication/start.js @@ -0,0 +1,14 @@ +/** ЗАДАЧА 3 - Умножение двух чисел + * + * 1. Объявите две переменные и присвойте им любые числа + * + * 2. Объявите еще одну переменную и присвойте ей результат + * умножения двух предыдущих переменных + * + * 3. Выведите значение последней переменной в консоль + */ + +a = 5; +b = 10; +result = a * b; +console.log(result); \ No newline at end of file diff --git a/04-strings-concatenation/finish.js b/04-strings-concatenation/finish.js new file mode 100644 index 0000000..1d63e2a --- /dev/null +++ b/04-strings-concatenation/finish.js @@ -0,0 +1,12 @@ +/** ЗАДАЧА 4 - Объединение строк + * + * 1. Объявите три переменные с значениями: + * - ваше имя + * - ваша фамилия + * - ваша профессия + * + * 2. Создайте еще одну переменную. Ее значение должно быть, например + * "Меня зовут <Имя> <Фамилия> и я <Профессия>" + * + * 3. Выведите значение последней переменной в консоль + */ diff --git a/04-strings-concatenation/solution.js b/04-strings-concatenation/solution.js new file mode 100644 index 0000000..69b5adc --- /dev/null +++ b/04-strings-concatenation/solution.js @@ -0,0 +1,27 @@ +/** ЗАДАЧА 4 - Объединение строк + * + * 1. Объявите три переменные с значениями: + * - ваше имя + * - ваша фамилия + * - ваша профессия + * + * 2. Создайте еще одну переменную. Ее значение должно быть, например + * "Меня зовут <Имя> <Фамилия> и я <Профессия>" + * + * 3. Выведите значение последней переменной в консоль + */ + +const myName = 'Bogdan' +const mySurname = 'Stashchuk' +const myProfession = 'Instructor' + +// OPTION 1 +const personInfo1 = + 'My name is ' + myName + ' ' + mySurname + ' and I am ' + myProfession + +console.log(personInfo1) + +// OPTION 2 +const personInfo2 = `My name is ${myName} ${mySurname} and I am ${myProfession}` + +console.log(personInfo2) diff --git a/04-strings-concatenation/start.js b/04-strings-concatenation/start.js new file mode 100644 index 0000000..ca88dbb --- /dev/null +++ b/04-strings-concatenation/start.js @@ -0,0 +1,19 @@ +/** ЗАДАЧА 4 - Объединение строк + * + * 1. Объявите три переменные с значениями: + * - ваше имя + * - ваша фамилия + * - ваша профессия + * + * 2. Создайте еще одну переменную. Ее значение должно быть, например + * "Меня зовут <Имя> <Фамилия> и я <Профессия>" + * + * 3. Выведите значение последней переменной в консоль + */ + + +var name = 'Vadim'; +var surrname = 'Fedosenko'; +var profession = 'JS programmer'; + +console.log("Меня зовут " + name + " " + surrname + " и я " + profession) \ No newline at end of file diff --git a/05-comments/finish.js b/05-comments/finish.js new file mode 100644 index 0000000..20af54b --- /dev/null +++ b/05-comments/finish.js @@ -0,0 +1,9 @@ +/** ЗАДАЧА 5 - Комментарии + * + * 1. Добавьте однострочный комментарий + * + * 2. Объявите любую переменную и опишите ее + * с помощью комментария в той же строке + * + * 3. Создайте многострочный комментарий + */ diff --git a/05-comments/solution.js b/05-comments/solution.js new file mode 100644 index 0000000..2e75aa1 --- /dev/null +++ b/05-comments/solution.js @@ -0,0 +1,31 @@ +/** ЗАДАЧА 5 - Комментарии + * + * 1. Добавьте однострочный комментарий + * + * 2. Объявите любую переменную и опишите ее + * с помощью комментария в той же строке + * + * 3. Создайте многострочный комментарий + */ + +// SINGLE-LINE COMMENT +// Это однострочный комментарий + +// INLINE COMMENT +const myName = 'Bogdan' // это моё имя + +// MULTILINE COMMENT 1 +/* Это +многострочный +комментарий */ + +const mySurname = 'Stashchuk' + +// MULTILINE COMMENT 2 +/** + * Это + * многострочный + * комментарий + */ + +5 + 2 diff --git a/05-comments/start.js b/05-comments/start.js new file mode 100644 index 0000000..0903980 --- /dev/null +++ b/05-comments/start.js @@ -0,0 +1,16 @@ +/** ЗАДАЧА 5 - Комментарии + * + * 1. Добавьте однострочный комментарий + * + * 2. Объявите любую переменную и опишите ее + * с помощью комментария в той же строке + * + * 3. Создайте многострочный комментарий + */ + +//Однострочный комментарий +var a = 0; //Переменная а со значением 0 + +/** + * многострочный комментарий + */ \ No newline at end of file diff --git a/06-data-types/finish.js b/06-data-types/finish.js new file mode 100644 index 0000000..d769d7c --- /dev/null +++ b/06-data-types/finish.js @@ -0,0 +1,14 @@ +/** ЗАДАЧА 6 - Типы данных + * + * 1. Объявите несколько переменных и присвойте им значения: + * - строка + * - число + * - логическое + * - null + * - undefined + * - объект + * - массив + * + * 2. Выведите в консоль тип каждого из значений + * используя оператор typeof + */ diff --git a/06-data-types/solution.js b/06-data-types/solution.js new file mode 100644 index 0000000..61451d3 --- /dev/null +++ b/06-data-types/solution.js @@ -0,0 +1,30 @@ +/** ЗАДАЧА 6 - Типы данных + * + * 1. Объявите несколько переменных и присвойте им значения: + * - строка + * - число + * - логическое + * - null + * - undefined + * - объект + * - массив + * + * 2. Выведите в консоль тип каждого из значений + * используя оператор typeof + */ + +const myString = 'abc' +const myNumber = 10 +const myBoolean = true +const myNull = null +let myUndefined +const myObject = {} +const myArray = [] + +console.log(typeof myString) +console.log(typeof myNumber) +console.log(typeof myBoolean) +console.log(typeof myNull) +console.log(typeof myUndefined) +console.log(typeof myObject) +console.log(typeof myArray) diff --git a/06-data-types/start.js b/06-data-types/start.js new file mode 100644 index 0000000..e26722e --- /dev/null +++ b/06-data-types/start.js @@ -0,0 +1,27 @@ +/** ЗАДАЧА 6 - Типы данных + * + * 1. Объявите несколько переменных и присвойте им значения: + * - строка + * - число + * - логическое + * - null + * - undefined + * - объект + * - массив + * + * 2. Выведите в консоль тип каждого из значений + * используя оператор typeof + */ + + +var string = 'Строка'; +var number = 5; +var bool = true; +var nulled = null; +var nonamed = undefined; +var object = { + a: 'test_object' +}; +var massive = [1, 2, 5]; + +console.log(typeof string, typeof number, typeof bool, typeof nulled, typeof nonamed, typeof object, typeof massive) diff --git a/07-regular-function/finish.js b/07-regular-function/finish.js new file mode 100644 index 0000000..5a699da --- /dev/null +++ b/07-regular-function/finish.js @@ -0,0 +1,10 @@ +/** ЗАДАЧА 7 - Объявление и вызов функции + * + * 1. Объявите функцию, использую ключевое слово "function" + * + * 2. Не указывайте параметры функции + * + * 3. Внутри функции выведите в консоль своё имя + * + * 4. Вызовите функцию + */ diff --git a/07-regular-function/solution.js b/07-regular-function/solution.js new file mode 100644 index 0000000..16aee36 --- /dev/null +++ b/07-regular-function/solution.js @@ -0,0 +1,17 @@ +/** ЗАДАЧА 7 - Объявление и вызов функции + * + * 1. Объявите функцию, использую ключевое слово "function" + * + * 2. Не указывайте параметры функции + * + * 3. Внутри функции выведите в консоль своё имя + * + * 4. Вызовите функцию + */ + +function printMyName() { + const myName = 'Bogdan' + console.log(myName) +} + +printMyName() diff --git a/07-regular-function/start.js b/07-regular-function/start.js new file mode 100644 index 0000000..3f57143 --- /dev/null +++ b/07-regular-function/start.js @@ -0,0 +1,17 @@ +/** ЗАДАЧА 7 - Объявление и вызов функции + * + * 1. Объявите функцию, использую ключевое слово "function" + * + * 2. Не указывайте параметры функции + * + * 3. Внутри функции выведите в консоль своё имя + * + * 4. Вызовите функцию + */ + + +function showMyName() { + console.log('Меня звать Вадим!') +} + +showMyName(); \ No newline at end of file diff --git a/08-function-expression/finish.js b/08-function-expression/finish.js new file mode 100644 index 0000000..53605f4 --- /dev/null +++ b/08-function-expression/finish.js @@ -0,0 +1,12 @@ +/** ЗАДАЧА 8 - Присваивание функции переменной + * + * 1. Объявите переменную и присвойте ей функциональное выражение + * + * 2. У функции должен быть один параметр "name" + * + * 3. Верните из функции строку "Привет, " + * + * 4. Вызовите функцию дважды с разными аргументами + * + * 5. Результат вызовов функции выведите в консоль + */ diff --git a/08-function-expression/solution.js b/08-function-expression/solution.js new file mode 100644 index 0000000..cdfbf52 --- /dev/null +++ b/08-function-expression/solution.js @@ -0,0 +1,20 @@ +/** ЗАДАЧА 8 - Присваивание функции переменной + * + * 1. Объявите переменную и присвойте ей функциональное выражение + * + * 2. У функции должен быть один параметр "name" + * + * 3. Верните из функции строку "Привет, " + * + * 4. Вызовите функцию дважды с разными аргументами + * + * 5. Результат вызовов функции выведите в консоль + */ + +const hello = function (name) { + return 'Привет, ' + name +} + +console.log(hello('Богдан')) + +console.log(hello('Ольга')) diff --git a/08-function-expression/start.js b/08-function-expression/start.js new file mode 100644 index 0000000..cae46af --- /dev/null +++ b/08-function-expression/start.js @@ -0,0 +1,20 @@ +/** ЗАДАЧА 8 - Присваивание функции переменной + * + * 1. Объявите переменную и присвойте ей функциональное выражение + * + * 2. У функции должен быть один параметр "name" + * + * 3. Верните из функции строку "Привет, " + * + * 4. Вызовите функцию дважды с разными аргументами + * + * 5. Результат вызовов функции выведите в консоль + */ + + +var sayHello = function(name) { + console.log("Hello, " + name) +}; + +sayHello("Иван"); +sayHello("Алексей"); \ No newline at end of file diff --git a/09-arrow-function/finish.js b/09-arrow-function/finish.js new file mode 100644 index 0000000..8856757 --- /dev/null +++ b/09-arrow-function/finish.js @@ -0,0 +1,12 @@ +/** ЗАДАЧА 9 - Стрелочная функция + * + * 1. Объявите переменную и присвойте ей стрелочную функцию + * + * 2. У функции не должно быть параметров + * + * 3. Явно верните из функции строку "Привет, мир!" + * + * 4. Вызовите функцию и выведите результат в консоль + * + * 5. Перепишите функцию так, чтобы результат возвращался неявно + */ diff --git a/09-arrow-function/solution.js b/09-arrow-function/solution.js new file mode 100644 index 0000000..4727556 --- /dev/null +++ b/09-arrow-function/solution.js @@ -0,0 +1,22 @@ +/** ЗАДАЧА 9 - Стрелочная функция + * + * 1. Объявите переменную и присвойте ей стрелочную функцию + * + * 2. У функции не должно быть параметров + * + * 3. Явно верните из функции строку "Привет, мир!" + * + * 4. Вызовите функцию и выведите результат в консоль + * + * 5. Перепишите функцию так, чтобы результат возвращался неявно + */ + +// // Явный возврат результата +// const helloWorld = () => { +// return 'Привет, мир!' +// } + +// Неявный возврат результата +const helloWorld = () => 'Привет, мир!' + +console.log(helloWorld()) diff --git a/09-arrow-function/start.js b/09-arrow-function/start.js new file mode 100644 index 0000000..1a56887 --- /dev/null +++ b/09-arrow-function/start.js @@ -0,0 +1,23 @@ +/** ЗАДАЧА 9 - Стрелочная функция + * + * 1. Объявите переменную и присвойте ей стрелочную функцию + * + * 2. У функции не должно быть параметров + * + * 3. Явно верните из функции строку "Привет, мир!" + * + * 4. Вызовите функцию и выведите результат в консоль + * + * 5. Перепишите функцию так, чтобы результат возвращался неявно + */ + +const greet = () => { + return "Привет, мир"; +}; + +console.log(greet()); + +// Неявный вызов +const greetImplicit = () => "Привет, мир"; + +console.log(greetImplicit()); \ No newline at end of file diff --git a/10-jsdoc/finish.js b/10-jsdoc/finish.js new file mode 100644 index 0000000..2bf3865 --- /dev/null +++ b/10-jsdoc/finish.js @@ -0,0 +1,14 @@ +/** ЗАДАЧА 10 - Комментарий перед функцией + * + * 1. Объявите функцию с двумя параметрами, значения которых - числа + * + * 2. Эта функция должна возвращать разницу между первым и вторым параметром + * + * 3. Добавьте многострочный комментарий перед функцией: + * - Текст комментария "Возвращает разницу двух чисел" + * - Укажите тип параметров - number + * - Укажите тип возвращаемого значения - number + * - Опишите возвращаемое значение - "Разница чисел" + * + * 4. Вызовите функцию + */ diff --git a/10-jsdoc/solution.js b/10-jsdoc/solution.js new file mode 100644 index 0000000..3914133 --- /dev/null +++ b/10-jsdoc/solution.js @@ -0,0 +1,27 @@ +/** ЗАДАЧА 10 - Комментарий перед функцией + * + * 1. Объявите функцию с двумя параметрами, значения которых - числа + * + * 2. Эта функция должна возвращать разницу между первым и вторым параметром + * + * 3. Добавьте многострочный комментарий перед функцией: + * - Текст комментария "Возвращает разницу двух чисел" + * - Укажите тип параметров - number + * - Укажите тип возвращаемого значения - number + * - Опишите возвращаемое значение - "Разница чисел" + * + * 4. Вызовите функцию + */ + +/** + * Возвращает разницу двух чисел + * @param {number} a + * @param {number} b + * @returns {number} Разница чисел + */ +function diff(a, b) { + return a - b +} + +const result = diff(10, 5) +console.log(result) diff --git a/10-jsdoc/start.js b/10-jsdoc/start.js new file mode 100644 index 0000000..52dc7f9 --- /dev/null +++ b/10-jsdoc/start.js @@ -0,0 +1,22 @@ +/** ЗАДАЧА 10 - Комментарий перед функцией + * + * 1. Объявите функцию с двумя параметрами, значения которых - числа + * + * 2. Эта функция должна возвращать разницу между первым и вторым параметром + * + * 3. Добавьте многострочный комментарий перед функцией: + * - Текст комментария "Возвращает разницу двух чисел" + * - Укажите тип параметров - number + * - Укажите тип возвращаемого значения - number + * - Опишите возвращаемое значение - "Разница чисел" + * + * 4. Вызовите функцию + */ +/** Возвращает разницу двух чисел */ +function numbers(a, b) { + a: 0; + b: 0; + return a - b; +}; + +console.log("Разница чисел: " + numbers(10, 5)); \ No newline at end of file diff --git a/11-callback-function/finish.js b/11-callback-function/finish.js new file mode 100644 index 0000000..cf64af1 --- /dev/null +++ b/11-callback-function/finish.js @@ -0,0 +1,6 @@ +/** ЗАДАЧА 11 - Колбэк функция + * + * 1. Выведите в консоль "Привет, мир!" с задержкой 5 секунд + * + * 2. Используйте стрелочную функцию + */ diff --git a/11-callback-function/solution.js b/11-callback-function/solution.js new file mode 100644 index 0000000..fc07ba3 --- /dev/null +++ b/11-callback-function/solution.js @@ -0,0 +1,8 @@ +/** ЗАДАЧА 11 - Колбэк функция + * + * 1. Выведите в консоль "Привет, мир!" с задержкой 5 секунд + * + * 2. Используйте стрелочную функцию + */ + +setTimeout(() => console.log('Привет, мир!'), 5000) diff --git a/11-callback-function/start.js b/11-callback-function/start.js new file mode 100644 index 0000000..cf64af1 --- /dev/null +++ b/11-callback-function/start.js @@ -0,0 +1,6 @@ +/** ЗАДАЧА 11 - Колбэк функция + * + * 1. Выведите в консоль "Привет, мир!" с задержкой 5 секунд + * + * 2. Используйте стрелочную функцию + */ diff --git a/12-create-object/finish.js b/12-create-object/finish.js new file mode 100644 index 0000000..12b1a17 --- /dev/null +++ b/12-create-object/finish.js @@ -0,0 +1,10 @@ +/** ЗАДАЧА 12 - Создание объекта + * + * 1. Создайте объект с тремя свойствами: + * - name + * - surname + * - favoriteNumber + * + * 2. Выведите в консоль строку + * "My name is and my favorite number is " + */ diff --git a/12-create-object/solution.js b/12-create-object/solution.js new file mode 100644 index 0000000..e2eab5a --- /dev/null +++ b/12-create-object/solution.js @@ -0,0 +1,20 @@ +/** ЗАДАЧА 12 - Создание объекта + * + * 1. Создайте объект с тремя свойствами: + * - name + * - surname + * - favoriteNumber + * + * 2. Выведите в консоль строку + * "My name is and my favorite number is " + */ + +const person = { + name: 'Bogdan', + surname: 'Stashchuk', + favoriteNumber: 5, +} + +const personInfo = `My name is ${person.name} ${person.surname} and my favorite number is ${person.favoriteNumber}` + +console.log(personInfo) diff --git a/12-create-object/start.js b/12-create-object/start.js new file mode 100644 index 0000000..12b1a17 --- /dev/null +++ b/12-create-object/start.js @@ -0,0 +1,10 @@ +/** ЗАДАЧА 12 - Создание объекта + * + * 1. Создайте объект с тремя свойствами: + * - name + * - surname + * - favoriteNumber + * + * 2. Выведите в консоль строку + * "My name is and my favorite number is " + */ diff --git a/13-string-length/finish.js b/13-string-length/finish.js new file mode 100644 index 0000000..0aa9cf6 --- /dev/null +++ b/13-string-length/finish.js @@ -0,0 +1,6 @@ +/** ЗАДАЧА 13 - Длина строки + * + * 1. Создайте переменную и присвойте ей любую строку + * + * 2. Виведите в консоль длину этой строки + */ diff --git a/13-string-length/solution.js b/13-string-length/solution.js new file mode 100644 index 0000000..19c6944 --- /dev/null +++ b/13-string-length/solution.js @@ -0,0 +1,12 @@ +/** ЗАДАЧА 13 - Длина строки + * + * 1. Создайте переменную и присвойте ей любую строку + * + * 2. Виведите в консоль длину этой строки + */ + +const myFavoriteSport = 'Snowboarding' + +const stringLength = myFavoriteSport.length + +console.log(stringLength) diff --git a/13-string-length/start.js b/13-string-length/start.js new file mode 100644 index 0000000..0aa9cf6 --- /dev/null +++ b/13-string-length/start.js @@ -0,0 +1,6 @@ +/** ЗАДАЧА 13 - Длина строки + * + * 1. Создайте переменную и присвойте ей любую строку + * + * 2. Виведите в консоль длину этой строки + */ diff --git a/14-uppercase-string/finish.js b/14-uppercase-string/finish.js new file mode 100644 index 0000000..210b64f --- /dev/null +++ b/14-uppercase-string/finish.js @@ -0,0 +1,14 @@ +/** ЗАДАЧА 14 - Строка заглавными буквами + * + * 1. Создайте переменную и присвойте ей любую строку + * + * 2. Убедитесь что значение этой переменной НЕ является экземпляром String + * Используйте для этого оператор "instanceof" + * + * 3. Убедитесь что значение этой переменной имеет тип "string" + * + * 4. Создайте другую переменную и ее значением должно быть значение + * первой переменной заглавными буквами + * + * 5. Выведите в консоль значение второй переменной + */ diff --git a/14-uppercase-string/solution.js b/14-uppercase-string/solution.js new file mode 100644 index 0000000..f9b2ddd --- /dev/null +++ b/14-uppercase-string/solution.js @@ -0,0 +1,30 @@ +/** ЗАДАЧА 14 - Строка заглавными буквами + * + * 1. Создайте переменную и присвойте ей любую строку + * + * 2. Убедитесь что значение этой переменной НЕ является экземпляром String + * Используйте для этого оператор "instanceof" + * + * 3. Убедитесь что значение этой переменной имеет тип "string" + * + * 4. Создайте другую переменную и ее значением должно быть значение + * первой переменной заглавными буквами + * + * 5. Выведите в консоль значение второй переменной + */ + +const myFavoriteSeason = 'summer' + +console.log(myFavoriteSeason instanceof String) + +console.log(typeof myFavoriteSeason) + +const seasonToUpperCase = myFavoriteSeason.toUpperCase() + +console.log(seasonToUpperCase) + +// // СОЗДАНИЕ ЭКЗЕМПЛРЯРА String +// const myString = new String('Bogdan') +// console.log(myString instanceof String) +// console.log(typeof myString) +// console.log(myString.toUpperCase()) diff --git a/14-uppercase-string/start.js b/14-uppercase-string/start.js new file mode 100644 index 0000000..210b64f --- /dev/null +++ b/14-uppercase-string/start.js @@ -0,0 +1,14 @@ +/** ЗАДАЧА 14 - Строка заглавными буквами + * + * 1. Создайте переменную и присвойте ей любую строку + * + * 2. Убедитесь что значение этой переменной НЕ является экземпляром String + * Используйте для этого оператор "instanceof" + * + * 3. Убедитесь что значение этой переменной имеет тип "string" + * + * 4. Создайте другую переменную и ее значением должно быть значение + * первой переменной заглавными буквами + * + * 5. Выведите в консоль значение второй переменной + */ diff --git a/15-replace-part-string/finish.js b/15-replace-part-string/finish.js new file mode 100644 index 0000000..5d7827c --- /dev/null +++ b/15-replace-part-string/finish.js @@ -0,0 +1,8 @@ +/** ЗАДАЧА 15 - Замена части строки + * + * 1. Создайте переменную и присвойте ей строку "Good Morning" + * + * 2. Замените "Morning" на "Evening" и присвойте результат новой переменной + * + * 3. Выведите значение второй переменной в консоль + */ diff --git a/15-replace-part-string/solution.js b/15-replace-part-string/solution.js new file mode 100644 index 0000000..15d479e --- /dev/null +++ b/15-replace-part-string/solution.js @@ -0,0 +1,14 @@ +/** ЗАДАЧА 15 - Замена части строки + * + * 1. Создайте переменную и присвойте ей строку "Good Morning" + * + * 2. Замените "Morning" на "Evening" и присвойте результат новой переменной + * + * 3. Выведите значение второй переменной в консоль + */ + +const greeting = 'Good Morning' + +const updatedGreeting = greeting.replace('Morning', 'Evening') + +console.log(updatedGreeting) diff --git a/15-replace-part-string/start.js b/15-replace-part-string/start.js new file mode 100644 index 0000000..5d7827c --- /dev/null +++ b/15-replace-part-string/start.js @@ -0,0 +1,8 @@ +/** ЗАДАЧА 15 - Замена части строки + * + * 1. Создайте переменную и присвойте ей строку "Good Morning" + * + * 2. Замените "Morning" на "Evening" и присвойте результат новой переменной + * + * 3. Выведите значение второй переменной в консоль + */ diff --git a/16-create-array/finish.js b/16-create-array/finish.js new file mode 100644 index 0000000..d0dca6a --- /dev/null +++ b/16-create-array/finish.js @@ -0,0 +1,8 @@ +/** ЗАДАЧА 16 - Создание массива + * + * 1. Создайте массив с тремя элементами разных типов + * + * 2. Выведите в консоль первый элемент массива + * + * 3. Выведите в консоль длину массива + */ diff --git a/16-create-array/solution.js b/16-create-array/solution.js new file mode 100644 index 0000000..ae87005 --- /dev/null +++ b/16-create-array/solution.js @@ -0,0 +1,14 @@ +/** ЗАДАЧА 16 - Создание массива + * + * 1. Создайте массив с тремя элементами разных типов + * + * 2. Выведите в консоль первый элемент массива + * + * 3. Выведите в консоль длину массива + */ + +const myArray = [true, 15, null] + +console.log(myArray[0]) + +console.log(myArray.length) diff --git a/16-create-array/start.js b/16-create-array/start.js new file mode 100644 index 0000000..d0dca6a --- /dev/null +++ b/16-create-array/start.js @@ -0,0 +1,8 @@ +/** ЗАДАЧА 16 - Создание массива + * + * 1. Создайте массив с тремя элементами разных типов + * + * 2. Выведите в консоль первый элемент массива + * + * 3. Выведите в консоль длину массива + */ diff --git a/17-replace-element-array/finish.js b/17-replace-element-array/finish.js new file mode 100644 index 0000000..7c25aba --- /dev/null +++ b/17-replace-element-array/finish.js @@ -0,0 +1,10 @@ +/** ЗАДАЧА 17 - Замена элементов массива + * + * 1. Создайте массив с нескольким элементами разных типов + * + * 2. Выведите в консоль весь массив + * + * 3. Замените второй элемент массива на другой + * + * 4. Выведите в консоль измененный массив + */ diff --git a/17-replace-element-array/solution.js b/17-replace-element-array/solution.js new file mode 100644 index 0000000..0c7f552 --- /dev/null +++ b/17-replace-element-array/solution.js @@ -0,0 +1,18 @@ +/** ЗАДАЧА 17 - Замена элементов массива + * + * 1. Создайте массив с нескольким элементами разных типов + * + * 2. Выведите в консоль весь массив + * + * 3. Замените второй элемент массива на другой + * + * 4. Выведите в консоль измененный массив + */ + +const myArray = ['abc', null, 25, true] + +console.log(myArray) + +myArray[1] = 125 + +console.log(myArray) diff --git a/17-replace-element-array/start.js b/17-replace-element-array/start.js new file mode 100644 index 0000000..7c25aba --- /dev/null +++ b/17-replace-element-array/start.js @@ -0,0 +1,10 @@ +/** ЗАДАЧА 17 - Замена элементов массива + * + * 1. Создайте массив с нескольким элементами разных типов + * + * 2. Выведите в консоль весь массив + * + * 3. Замените второй элемент массива на другой + * + * 4. Выведите в консоль измененный массив + */ diff --git a/18-iterate-over-array/finish.js b/18-iterate-over-array/finish.js new file mode 100644 index 0000000..e5c9a30 --- /dev/null +++ b/18-iterate-over-array/finish.js @@ -0,0 +1,7 @@ +/** ЗАДАЧА 18 - Перебор элементов массива + * + * 1. Создайте массив с несколькими элементами + * + * 2. Используя один из методов массивов, переберите все элементы + * и выведите каждый элемент в консоль + */ diff --git a/18-iterate-over-array/solution.js b/18-iterate-over-array/solution.js new file mode 100644 index 0000000..54c76c7 --- /dev/null +++ b/18-iterate-over-array/solution.js @@ -0,0 +1,11 @@ +/** ЗАДАЧА 18 - Перебор элементов массива + * + * 1. Создайте массив с несколькими элементами + * + * 2. Используя один из методов массивов, переберите все элементы + * и выведите каждый элемент в консоль + */ + +const myArray = ['abc', true, null, undefined, 200] + +myArray.forEach((element) => console.log(element)) diff --git a/18-iterate-over-array/start.js b/18-iterate-over-array/start.js new file mode 100644 index 0000000..e5c9a30 --- /dev/null +++ b/18-iterate-over-array/start.js @@ -0,0 +1,7 @@ +/** ЗАДАЧА 18 - Перебор элементов массива + * + * 1. Создайте массив с несколькими элементами + * + * 2. Используя один из методов массивов, переберите все элементы + * и выведите каждый элемент в консоль + */ diff --git a/19-push-to-array/finish.js b/19-push-to-array/finish.js new file mode 100644 index 0000000..5df5a8e --- /dev/null +++ b/19-push-to-array/finish.js @@ -0,0 +1,8 @@ +/** ЗАДАЧА 19 - Добавление элементов в массив + * + * 1. Создайте любой массив + * + * 2. Добавьте в конец массива несколько новых элементов + * + * 3. Выведите в консоль длину результирующего массива + */ diff --git a/19-push-to-array/solution.js b/19-push-to-array/solution.js new file mode 100644 index 0000000..6436f15 --- /dev/null +++ b/19-push-to-array/solution.js @@ -0,0 +1,21 @@ +/** ЗАДАЧА 19 - Добавление элементов в массив + * + * 1. Создайте любой массив + * + * 2. Добавьте в конец массива несколько новых элементов + * + * 3. Выведите в консоль длину результирующего массива + */ + +const myNumbers = [4, 15, 107, 80] + +console.log(myNumbers) + +myNumbers.push(10) + +console.log(myNumbers) + +myNumbers.push(5, 25) + +console.log(myNumbers) +console.log(myNumbers.length) diff --git a/19-push-to-array/start.js b/19-push-to-array/start.js new file mode 100644 index 0000000..5df5a8e --- /dev/null +++ b/19-push-to-array/start.js @@ -0,0 +1,8 @@ +/** ЗАДАЧА 19 - Добавление элементов в массив + * + * 1. Создайте любой массив + * + * 2. Добавьте в конец массива несколько новых элементов + * + * 3. Выведите в консоль длину результирующего массива + */ diff --git a/20-date/finish.js b/20-date/finish.js new file mode 100644 index 0000000..e057247 --- /dev/null +++ b/20-date/finish.js @@ -0,0 +1,6 @@ +/** ЗАДАЧА 20 - Дата + * + * 1. Создайте переменную и присвойте ей текущее время в миллисекундах + * + * 2. Выведите значение в консоль + */ diff --git a/20-date/solution.js b/20-date/solution.js new file mode 100644 index 0000000..13afc24 --- /dev/null +++ b/20-date/solution.js @@ -0,0 +1,12 @@ +/** ЗАДАЧА 20 - Дата + * + * 1. Создайте переменную и присвойте ей текущее время в миллисекундах + * + * 2. Выведите значение в консоль + */ + +const currentDate = new Date() + +const currentDateInMs = currentDate.getTime() + +console.log(currentDateInMs) diff --git a/20-date/start.js b/20-date/start.js new file mode 100644 index 0000000..e057247 --- /dev/null +++ b/20-date/start.js @@ -0,0 +1,6 @@ +/** ЗАДАЧА 20 - Дата + * + * 1. Создайте переменную и присвойте ей текущее время в миллисекундах + * + * 2. Выведите значение в консоль + */ diff --git a/21-compare-variables/finish.js b/21-compare-variables/finish.js new file mode 100644 index 0000000..49a5c52 --- /dev/null +++ b/21-compare-variables/finish.js @@ -0,0 +1,17 @@ +/** ЗАДАЧА 21 - Сравнение переменных + * + * 1. Сравните 2 переменные "myVariable1" и "myVariable2". + * Выведите в консоль "true", если значение "myVariable1" меньше или равно "myVariable2". + * + * 2. Преобразуйте обе переменные в числа перед сравнением. + */ + +let myVariable1 = 10 +let myVariable2 = '5' + +// Напишите код здесь + +myVariable1 = '20' +myVariable2 = 100 + +// Напишите код здесь diff --git a/21-compare-variables/solution.js b/21-compare-variables/solution.js new file mode 100644 index 0000000..3ed4a4e --- /dev/null +++ b/21-compare-variables/solution.js @@ -0,0 +1,25 @@ +/** ЗАДАЧА 21 - Сравнение переменных + * + * 1. Сравните 2 переменные "myVariable1" и "myVariable2". + * Выведите в консоль "true", если значение "myVariable1" меньше или равно "myVariable2". + * + * 2. Преобразуйте обе переменные в числа перед сравнением. + */ + +let myVariable1 = 10 +let myVariable2 = '5' + +// // Вариант 1 конвертации строки в число +// console.log(parseInt('25')) +// console.log(typeof parseInt('25')) + +// // Вариант 2 конвертации строки в число +// console.log(+'35') +// console.log(typeof +'35') + +console.log(parseInt(myVariable1) <= parseInt(myVariable2)) + +myVariable1 = '20' +myVariable2 = 100 + +console.log(parseInt(myVariable1) <= parseInt(myVariable2)) diff --git a/21-compare-variables/start.js b/21-compare-variables/start.js new file mode 100644 index 0000000..49a5c52 --- /dev/null +++ b/21-compare-variables/start.js @@ -0,0 +1,17 @@ +/** ЗАДАЧА 21 - Сравнение переменных + * + * 1. Сравните 2 переменные "myVariable1" и "myVariable2". + * Выведите в консоль "true", если значение "myVariable1" меньше или равно "myVariable2". + * + * 2. Преобразуйте обе переменные в числа перед сравнением. + */ + +let myVariable1 = 10 +let myVariable2 = '5' + +// Напишите код здесь + +myVariable1 = '20' +myVariable2 = 100 + +// Напишите код здесь diff --git a/22-division-remainder/finish.js b/22-division-remainder/finish.js new file mode 100644 index 0000000..264bfb6 --- /dev/null +++ b/22-division-remainder/finish.js @@ -0,0 +1,12 @@ +/** ЗАДАЧА 22 - Остаток от деления + * + * 1. Выведите в консоль остаток от деления "myNumber1" на "myNumber2". + * + * 2. Какой приоритет и ассоциативность + * имеет оператор остаток от деления? + * + * 3. Проверьте ассоциативность самостоятельно + */ + +const myNumber1 = 10 // 10 = 3 + 3 + 3 + 1 +const myNumber2 = 3 diff --git a/22-division-remainder/solution.js b/22-division-remainder/solution.js new file mode 100644 index 0000000..99a515e --- /dev/null +++ b/22-division-remainder/solution.js @@ -0,0 +1,23 @@ +/** ЗАДАЧА 22 - Остаток от деления + * + * 1. Выведите в консоль остаток от деления "myNumber1" на "myNumber2". + * + * 2. Какой приоритет и ассоциативность + * имеет оператор остаток от деления? + * + * 3. Проверьте ассоциативность самостоятельно + */ + +const myNumber1 = 10 // 10 = 3 + 3 + 3 + 1 +const myNumber2 = 3 + +console.log(myNumber1 % myNumber2) + +/** + * Приоритетность оператора % - 13 (выше чем у операторов + и -) + * Ассоциативность оператора % - left-to-right + * + * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence + */ + +console.log(((100 % 23) % 5) % 3) diff --git a/22-division-remainder/start.js b/22-division-remainder/start.js new file mode 100644 index 0000000..264bfb6 --- /dev/null +++ b/22-division-remainder/start.js @@ -0,0 +1,12 @@ +/** ЗАДАЧА 22 - Остаток от деления + * + * 1. Выведите в консоль остаток от деления "myNumber1" на "myNumber2". + * + * 2. Какой приоритет и ассоциативность + * имеет оператор остаток от деления? + * + * 3. Проверьте ассоциативность самостоятельно + */ + +const myNumber1 = 10 // 10 = 3 + 3 + 3 + 1 +const myNumber2 = 3 diff --git a/23-or-and-operators/finish.js b/23-or-and-operators/finish.js new file mode 100644 index 0000000..b9c8a2d --- /dev/null +++ b/23-or-and-operators/finish.js @@ -0,0 +1,6 @@ +/** ЗАДАЧА 23 - ИЛИ и И операторы + * + * Что будет выведено в консоль? + */ + +console.log(3 || (true && null) || false) diff --git a/23-or-and-operators/solution.js b/23-or-and-operators/solution.js new file mode 100644 index 0000000..a629532 --- /dev/null +++ b/23-or-and-operators/solution.js @@ -0,0 +1,21 @@ +/** ЗАДАЧА 23 - ИЛИ и И операторы + * + * Что будет выведено в консоль? + */ + +console.log(3 || (true && null) || false) // <-- 3 + +/** ШАГ 1 + * (true && null) + * null + */ + +/** ШАГ 2 + * 3 || null || false + * 3 + */ + +// console.log(true && null && 10) // <-- null +// console.log(true && 'abc' && 10) // <-- 10 + +// console.log(10 || false) // <-- 10 diff --git a/23-or-and-operators/start.js b/23-or-and-operators/start.js new file mode 100644 index 0000000..b9c8a2d --- /dev/null +++ b/23-or-and-operators/start.js @@ -0,0 +1,6 @@ +/** ЗАДАЧА 23 - ИЛИ и И операторы + * + * Что будет выведено в консоль? + */ + +console.log(3 || (true && null) || false) diff --git a/24-alternative-binary-operators/.DS_Store b/24-alternative-binary-operators/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/24-alternative-binary-operators/.DS_Store differ diff --git a/24-alternative-binary-operators/finish.js b/24-alternative-binary-operators/finish.js new file mode 100644 index 0000000..e2c3ae4 --- /dev/null +++ b/24-alternative-binary-operators/finish.js @@ -0,0 +1,18 @@ +/** ЗАДАЧА 24 - Альтернативные бинарные операторы + * + * В каждом выражении замените два оператора на один бинарный + */ + +let a = 10 + +a = a + 1 +console.log(a) // 11 + +a = a * 2 +console.log(a) // 22 + +a = a - 5 +console.log(a) // 17 + +a = a / 2 +console.log(a) // 8.5 diff --git a/24-alternative-binary-operators/solution.js b/24-alternative-binary-operators/solution.js new file mode 100644 index 0000000..c65f446 --- /dev/null +++ b/24-alternative-binary-operators/solution.js @@ -0,0 +1,22 @@ +/** ЗАДАЧА 24 - Альтернативные бинарные операторы + * + * В каждом выражении замените два оператора на один бинарный + */ + +let a = 10 + +// a = a + 1 +a += 1 +console.log(a) // 11 + +// a = a * 2 +a *= 2 +console.log(a) // 22 + +// a = a - 5 +a -= 5 +console.log(a) // 17 + +// a = a / 2 +a /= 2 +console.log(a) // 8.5 diff --git a/24-alternative-binary-operators/start.js b/24-alternative-binary-operators/start.js new file mode 100644 index 0000000..e2c3ae4 --- /dev/null +++ b/24-alternative-binary-operators/start.js @@ -0,0 +1,18 @@ +/** ЗАДАЧА 24 - Альтернативные бинарные операторы + * + * В каждом выражении замените два оператора на один бинарный + */ + +let a = 10 + +a = a + 1 +console.log(a) // 11 + +a = a * 2 +console.log(a) // 22 + +a = a - 5 +console.log(a) // 17 + +a = a / 2 +console.log(a) // 8.5 diff --git a/25-expression-or-statement/finish.js b/25-expression-or-statement/finish.js new file mode 100644 index 0000000..f22d17d --- /dev/null +++ b/25-expression-or-statement/finish.js @@ -0,0 +1,28 @@ +/** ЗАДАЧА 25 - Выражение или инструкция + * + * Определите тип каждой конструкции JavaScript: + * - выражение (expression) + * - инструкция (statement) + * - выражение-инструкция (expression statement) + */ + +15 + +const myObject = { + x: 10, + y: true, +} + +myObject.z = 'abc' + +delete myObject.x + +let newVariable + +newVariable = 30 + 5 + +console.log(newVariable) + +if (newVariable > 10) { + console.log(`${newVariable} больше 10`) +} diff --git a/25-expression-or-statement/solution.js b/25-expression-or-statement/solution.js new file mode 100644 index 0000000..df438a2 --- /dev/null +++ b/25-expression-or-statement/solution.js @@ -0,0 +1,49 @@ +/** ЗАДАЧА 25 - Выражение или инструкция + * + * Определите тип каждой конструкции JavaScript: + * - выражение (expression) + * - инструкция (statement) + * - выражение-инструкция (expression statement) + */ + +// expression statement +15 + +// statement +const myObject = { + // Object literal is expression + x: 10, + y: true, +} + +// expression statement +myObject.z = 'abc' // <-- expression + +// expression statement +delete myObject.x + +// statement +let newVariable + +// expression statement +newVariable = 30 + 5 // <-- expression + +// expression statement +console.log(newVariable) +/** ^ + * expression + */ + +// statement +if (newVariable > 10) { + /** ^ + * expression + */ + + // expression statement + console.log(`${newVariable} больше 10`) // <-- newVariable is expression + /** _________________________ + * ^ + * expression + */ +} diff --git a/25-expression-or-statement/start.js b/25-expression-or-statement/start.js new file mode 100644 index 0000000..f22d17d --- /dev/null +++ b/25-expression-or-statement/start.js @@ -0,0 +1,28 @@ +/** ЗАДАЧА 25 - Выражение или инструкция + * + * Определите тип каждой конструкции JavaScript: + * - выражение (expression) + * - инструкция (statement) + * - выражение-инструкция (expression statement) + */ + +15 + +const myObject = { + x: 10, + y: true, +} + +myObject.z = 'abc' + +delete myObject.x + +let newVariable + +newVariable = 30 + 5 + +console.log(newVariable) + +if (newVariable > 10) { + console.log(`${newVariable} больше 10`) +} diff --git a/26-what-will-be-logged/finish.js b/26-what-will-be-logged/finish.js new file mode 100644 index 0000000..68544a9 --- /dev/null +++ b/26-what-will-be-logged/finish.js @@ -0,0 +1,15 @@ +/** ЗАДАЧА 26 - Что будет выведено в консоли + * + * Что будет выведено в консоли? + * Ответьте на вопрос без запуска кода + */ + +function fn() { + console.log('Привет из функции fn') + + return function (a) { + console.log(a) + } +} + +fn()(true) diff --git a/26-what-will-be-logged/solution.js b/26-what-will-be-logged/solution.js new file mode 100644 index 0000000..68544a9 --- /dev/null +++ b/26-what-will-be-logged/solution.js @@ -0,0 +1,15 @@ +/** ЗАДАЧА 26 - Что будет выведено в консоли + * + * Что будет выведено в консоли? + * Ответьте на вопрос без запуска кода + */ + +function fn() { + console.log('Привет из функции fn') + + return function (a) { + console.log(a) + } +} + +fn()(true) diff --git a/26-what-will-be-logged/start.js b/26-what-will-be-logged/start.js new file mode 100644 index 0000000..68544a9 --- /dev/null +++ b/26-what-will-be-logged/start.js @@ -0,0 +1,15 @@ +/** ЗАДАЧА 26 - Что будет выведено в консоли + * + * Что будет выведено в консоли? + * Ответьте на вопрос без запуска кода + */ + +function fn() { + console.log('Привет из функции fn') + + return function (a) { + console.log(a) + } +} + +fn()(true) diff --git a/27-const/finish.js b/27-const/finish.js new file mode 100644 index 0000000..9aa3ece --- /dev/null +++ b/27-const/finish.js @@ -0,0 +1,23 @@ +/** ЗАДАЧА 27 - Const + * + * Ответьте на следующие вопросы: + * 1. Почему после 13 строки не выдается ошибка? + * 2. Почему после строки 18 генерируется TypeError? + * + * Измените одну строку кода, чтобы эта ошибка исчезла. + * Не меняйте строки 13, 18 + */ + +const arr = [1, 2] // <-- Объявление переменной используя const + +arr.push(3) + +console.log(arr) +// [1, 2, 3] + +arr = [1, 2, 3, 4] +// ДО: Uncaught TypeError: Assignment to constant variable. +// ПОСЛЕ: Нет ошибки + +console.log(arr) +// [1, 2, 3, 4] diff --git a/27-const/solution.js b/27-const/solution.js new file mode 100644 index 0000000..f1774e0 --- /dev/null +++ b/27-const/solution.js @@ -0,0 +1,23 @@ +/** ЗАДАЧА 27 - Const + * + * Ответьте на следующие вопросы: + * 1. Почему после 13 строки не выдается ошибка? + * 2. Почему после строки 18 генерируется TypeError? + * + * Измените одну строку кода, чтобы эта ошибка исчезла. + * Не меняйте строки 13, 18 + */ + +let arr = [1, 2] // <-- Объявление переменной используя const + +arr.push(3) + +console.log(arr) +// [1, 2, 3] + +arr = [1, 2, 3, 4] +// ДО: Uncaught TypeError: Assignment to constant variable. +// ПОСЛЕ: Нет ошибки + +console.log(arr) +// [1, 2, 3, 4] diff --git a/27-const/start.js b/27-const/start.js new file mode 100644 index 0000000..9aa3ece --- /dev/null +++ b/27-const/start.js @@ -0,0 +1,23 @@ +/** ЗАДАЧА 27 - Const + * + * Ответьте на следующие вопросы: + * 1. Почему после 13 строки не выдается ошибка? + * 2. Почему после строки 18 генерируется TypeError? + * + * Измените одну строку кода, чтобы эта ошибка исчезла. + * Не меняйте строки 13, 18 + */ + +const arr = [1, 2] // <-- Объявление переменной используя const + +arr.push(3) + +console.log(arr) +// [1, 2, 3] + +arr = [1, 2, 3, 4] +// ДО: Uncaught TypeError: Assignment to constant variable. +// ПОСЛЕ: Нет ошибки + +console.log(arr) +// [1, 2, 3, 4] diff --git a/28-let/finish.js b/28-let/finish.js new file mode 100644 index 0000000..6bb6ed5 --- /dev/null +++ b/28-let/finish.js @@ -0,0 +1,14 @@ +/** ЗАДАЧА 28 - Let + * + * Измените код так, чтобы ошибка исчезла + */ + +const myFavoriteAnimal = 'Monkey' + +console.log(myFavoriteAnimal) +// 'Monkey' + +const myFavoriteAnimal = 'Cat' + +console.log(myFavoriteAnimal) +// 'Cat' diff --git a/28-let/solution.js b/28-let/solution.js new file mode 100644 index 0000000..251f25b --- /dev/null +++ b/28-let/solution.js @@ -0,0 +1,14 @@ +/** ЗАДАЧА 28 - Let + * + * Измените код так, чтобы ошибка исчезла + */ + +let myFavoriteAnimal = 'Monkey' + +console.log(myFavoriteAnimal) +// 'Monkey' + +myFavoriteAnimal = 'Cat' + +console.log(myFavoriteAnimal) +// 'Cat' diff --git a/28-let/start.js b/28-let/start.js new file mode 100644 index 0000000..6bb6ed5 --- /dev/null +++ b/28-let/start.js @@ -0,0 +1,14 @@ +/** ЗАДАЧА 28 - Let + * + * Измените код так, чтобы ошибка исчезла + */ + +const myFavoriteAnimal = 'Monkey' + +console.log(myFavoriteAnimal) +// 'Monkey' + +const myFavoriteAnimal = 'Cat' + +console.log(myFavoriteAnimal) +// 'Cat' diff --git a/29-strict-mode/finish.js b/29-strict-mode/finish.js new file mode 100644 index 0000000..bc67292 --- /dev/null +++ b/29-strict-mode/finish.js @@ -0,0 +1,15 @@ +/** ЗАДАЧА 29 - Строгий режим + * + * 1. Исправьте ошибку, которая возникает при включенном строгом режиме + * + * 2. Что будет, если отключить строгий режим? + */ + +'use strict' + +function myFunction() { + a = 2 + return a +} + +myFunction() diff --git a/29-strict-mode/solution.js b/29-strict-mode/solution.js new file mode 100644 index 0000000..fa631f1 --- /dev/null +++ b/29-strict-mode/solution.js @@ -0,0 +1,19 @@ +/** ЗАДАЧА 29 - Строгий режим + * + * 1. Исправьте ошибку, которая возникает при включенном строгом режиме + * + * 2. Что будет, если отключить строгий режим? + */ + +'use strict' + +function myFunction() { + const a = 2 + return a +} + +myFunction() + +// // Переменная "a" доступна только внутри функции +// console.log(a) +// // ReferenceError: a is not defined diff --git a/29-strict-mode/start.js b/29-strict-mode/start.js new file mode 100644 index 0000000..bc67292 --- /dev/null +++ b/29-strict-mode/start.js @@ -0,0 +1,15 @@ +/** ЗАДАЧА 29 - Строгий режим + * + * 1. Исправьте ошибку, которая возникает при включенном строгом режиме + * + * 2. Что будет, если отключить строгий режим? + */ + +'use strict' + +function myFunction() { + a = 2 + return a +} + +myFunction() diff --git a/30-callback-function/.DS_Store b/30-callback-function/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/30-callback-function/.DS_Store differ diff --git a/30-callback-function/finish.js b/30-callback-function/finish.js new file mode 100644 index 0000000..6b3ee28 --- /dev/null +++ b/30-callback-function/finish.js @@ -0,0 +1,13 @@ +/** ЗАДАЧА 30 - Колбэк функция + * + * 1. Что будет выведено в консоль? + * Постарайтесь ответить без запуска кода. + * + * 2. Нужно ли как-то исправить этот код? + */ + +setTimeout(function myFn() { + console.log('Привет из функции myFn') +}, 2000) + +myFn() diff --git a/30-callback-function/solution.js b/30-callback-function/solution.js new file mode 100644 index 0000000..29a7ecc --- /dev/null +++ b/30-callback-function/solution.js @@ -0,0 +1,11 @@ +/** ЗАДАЧА 30 - Колбэк функция + * + * 1. Что будет выведено в консоль? + * Постарайтесь ответить без запуска кода. + * + * 2. Нужно ли как-то исправить этот код? + */ + +setTimeout(function () { + console.log('Привет из функции myFn') +}, 2000) diff --git a/30-callback-function/start.js b/30-callback-function/start.js new file mode 100644 index 0000000..6b3ee28 --- /dev/null +++ b/30-callback-function/start.js @@ -0,0 +1,13 @@ +/** ЗАДАЧА 30 - Колбэк функция + * + * 1. Что будет выведено в консоль? + * Постарайтесь ответить без запуска кода. + * + * 2. Нужно ли как-то исправить этот код? + */ + +setTimeout(function myFn() { + console.log('Привет из функции myFn') +}, 2000) + +myFn() diff --git a/31-intervals-timeouts/finish.js b/31-intervals-timeouts/finish.js new file mode 100644 index 0000000..d8c0096 --- /dev/null +++ b/31-intervals-timeouts/finish.js @@ -0,0 +1,14 @@ +/** ЗАДАЧА 31 - Интервалы и Таймауты + * + * Используйте следующие встроенные функции: + * setTimeout + * setInterval + * clearInterval + * + * Нужно вывести в консоль ТОЛЬКО 5 сообщений с интервалом 2 секунды: + * "Сообщение номер 1" + * "Сообщение номер 2" + * "Сообщение номер 3" + * "Сообщение номер 4" + * "Сообщение номер 5" + */ diff --git a/31-intervals-timeouts/solution.js b/31-intervals-timeouts/solution.js new file mode 100644 index 0000000..91f55c3 --- /dev/null +++ b/31-intervals-timeouts/solution.js @@ -0,0 +1,23 @@ +/** ЗАДАЧА 31 - Интервалы и Таймауты + * + * Используйте следующие встроенные функции: + * setTimeout + * setInterval + * clearInterval + * + * Нужно вывести в консоль ТОЛЬКО 5 сообщений с интервалом 2 секунды: + * "Сообщение номер 1" + * "Сообщение номер 2" + * "Сообщение номер 3" + * "Сообщение номер 4" + * "Сообщение номер 5" + */ + +let i = 1 + +const messageIntervalId = setInterval(() => { + console.log('Сообщение номер ' + i) + i = i + 1 +}, 2000) + +setTimeout(() => clearInterval(messageIntervalId), 11000) diff --git a/31-intervals-timeouts/start.js b/31-intervals-timeouts/start.js new file mode 100644 index 0000000..d8c0096 --- /dev/null +++ b/31-intervals-timeouts/start.js @@ -0,0 +1,14 @@ +/** ЗАДАЧА 31 - Интервалы и Таймауты + * + * Используйте следующие встроенные функции: + * setTimeout + * setInterval + * clearInterval + * + * Нужно вывести в консоль ТОЛЬКО 5 сообщений с интервалом 2 секунды: + * "Сообщение номер 1" + * "Сообщение номер 2" + * "Сообщение номер 3" + * "Сообщение номер 4" + * "Сообщение номер 5" + */ diff --git a/32-add-start-of-the-array/finish.js b/32-add-start-of-the-array/finish.js new file mode 100644 index 0000000..3817331 --- /dev/null +++ b/32-add-start-of-the-array/finish.js @@ -0,0 +1,14 @@ +/** ЗАДАЧА 32 - Добавление элементов в начало массива + * + * 1. Добавьте элементы а начало массива: + * - сначала строку "Привет" + * - потом число 100 + * + * 2. Выведите длину результирующего массива в консоль + */ + +const myArray = [true, null] + +// Напишите код здесь + +console.log(myArray) // [100, "Hello", true, null] diff --git a/32-add-start-of-the-array/solution.js b/32-add-start-of-the-array/solution.js new file mode 100644 index 0000000..9678336 --- /dev/null +++ b/32-add-start-of-the-array/solution.js @@ -0,0 +1,15 @@ +/** ЗАДАЧА 32 - Добавление элементов в начало массива + * + * 1. Добавьте элементы а начало массива: + * - сначала строку "Привет" + * - потом число 100 + * + * 2. Выведите длину результирующего массива в консоль + */ + +const myArray = [true, null] + +myArray.unshift('Привет') +console.log(myArray.unshift(100)) + +console.log(myArray) // [100, "Hello", true, null] diff --git a/32-add-start-of-the-array/start.js b/32-add-start-of-the-array/start.js new file mode 100644 index 0000000..3817331 --- /dev/null +++ b/32-add-start-of-the-array/start.js @@ -0,0 +1,14 @@ +/** ЗАДАЧА 32 - Добавление элементов в начало массива + * + * 1. Добавьте элементы а начало массива: + * - сначала строку "Привет" + * - потом число 100 + * + * 2. Выведите длину результирующего массива в консоль + */ + +const myArray = [true, null] + +// Напишите код здесь + +console.log(myArray) // [100, "Hello", true, null] diff --git a/33-add-at-index-array/finish.js b/33-add-at-index-array/finish.js new file mode 100644 index 0000000..fe67023 --- /dev/null +++ b/33-add-at-index-array/finish.js @@ -0,0 +1,10 @@ +/** ЗАДАЧА 33 - Добавление элемента по определенному индексу + * + * 1. Добавить элемент "abc" с индексом 10. + * + * 2. Выведите результирующий массив в консоль. Объясните результаты. + * + * 3. Какова длина конечного массива? + */ + +const myArray = [1, 2] diff --git a/33-add-at-index-array/solution.js b/33-add-at-index-array/solution.js new file mode 100644 index 0000000..efb0a18 --- /dev/null +++ b/33-add-at-index-array/solution.js @@ -0,0 +1,16 @@ +/** ЗАДАЧА 33 - Добавление элемента по определенному индексу + * + * 1. Добавить элемент "abc" с индексом 10. + * + * 2. Выведите результирующий массив в консоль. Объясните результаты. + * + * 3. Какова длина конечного массива? + */ + +const myArray = [1, 2] + +myArray[10] = 'abc' + +console.log(myArray) + +console.log(myArray.length) diff --git a/33-add-at-index-array/start.js b/33-add-at-index-array/start.js new file mode 100644 index 0000000..fe67023 --- /dev/null +++ b/33-add-at-index-array/start.js @@ -0,0 +1,10 @@ +/** ЗАДАЧА 33 - Добавление элемента по определенному индексу + * + * 1. Добавить элемент "abc" с индексом 10. + * + * 2. Выведите результирующий массив в консоль. Объясните результаты. + * + * 3. Какова длина конечного массива? + */ + +const myArray = [1, 2] diff --git a/34-array-of-objects/.DS_Store b/34-array-of-objects/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/34-array-of-objects/.DS_Store differ diff --git a/34-array-of-objects/finish.js b/34-array-of-objects/finish.js new file mode 100644 index 0000000..16e28d5 --- /dev/null +++ b/34-array-of-objects/finish.js @@ -0,0 +1,13 @@ +/** ЗАДАЧА 34 - Массив объектов + * + * 1. Создайте массив с 3 объектами "cars" + * + * 2. Каждый объект должен иметь три свойства + * - carBrand (строка) + * - price (число) + * - isAvailableForSale (логическое значение) + * + * 3. Добавьте еще один объект в массив + * + * 4. Выведите результирующий массив в консоль + */ diff --git a/34-array-of-objects/solution.js b/34-array-of-objects/solution.js new file mode 100644 index 0000000..ed0c8ed --- /dev/null +++ b/34-array-of-objects/solution.js @@ -0,0 +1,41 @@ +/** ЗАДАЧА 34 - Массив объектов + * + * 1. Создайте массив с 3 объектами "cars" + * + * 2. Каждый объект должен иметь три свойства + * - carBrand (строка) + * - price (число) + * - isAvailableForSale (логическое значение) + * + * 3. Добавьте еще один объект в массив + * + * 4. Выведите результирующий массив в консоль + */ + +const cars = [ + { + carBrand: 'BMW', + price: 12000, + isAvailableForSale: true, + }, + { + carBrand: 'Honda', + price: 10000, + isAvailableForSale: false, + }, + { + carBrand: 'Toyota', + price: 8000, + isAvailableForSale: true, + }, +] + +const newCar = { + carBrand: 'Tesla', + price: 20000, + isAvailableForSale: false, +} + +cars.push(newCar) + +console.log(cars) diff --git a/34-array-of-objects/start.js b/34-array-of-objects/start.js new file mode 100644 index 0000000..16e28d5 --- /dev/null +++ b/34-array-of-objects/start.js @@ -0,0 +1,13 @@ +/** ЗАДАЧА 34 - Массив объектов + * + * 1. Создайте массив с 3 объектами "cars" + * + * 2. Каждый объект должен иметь три свойства + * - carBrand (строка) + * - price (число) + * - isAvailableForSale (логическое значение) + * + * 3. Добавьте еще один объект в массив + * + * 4. Выведите результирующий массив в консоль + */ diff --git a/35-object-iteration/finish.js b/35-object-iteration/finish.js new file mode 100644 index 0000000..63121cf --- /dev/null +++ b/35-object-iteration/finish.js @@ -0,0 +1,15 @@ +/** ЗАДАЧА 35 - Итерация по свойствам объекта + * + * 1. Переберите все собственные свойства объекта + * + * 2. Если имя свойства (ключ) равно "key1" или "key3", + * выведите значение свойства в консоль. + */ + +const myObject = { + key1: true, + key5: 10, + key3: 'abc', + key4: null, + key10: NaN, +} diff --git a/35-object-iteration/solution.js b/35-object-iteration/solution.js new file mode 100644 index 0000000..51aef6c --- /dev/null +++ b/35-object-iteration/solution.js @@ -0,0 +1,23 @@ +/** ЗАДАЧА 35 - Итерация по свойствам объекта + * + * 1. Переберите все собственные свойства объекта + * + * 2. Если имя свойства (ключ) равно "key1" или "key3", + * выведите значение свойства в консоль. + */ + +const myObject = { + key1: true, + key5: 10, + key3: 'abc', + key4: null, + key10: NaN, +} + +const objectKeys = Object.keys(myObject) + +objectKeys.forEach((key) => { + if (key === 'key1' || key === 'key3') { + console.log(myObject[key]) + } +}) diff --git a/35-object-iteration/start.js b/35-object-iteration/start.js new file mode 100644 index 0000000..63121cf --- /dev/null +++ b/35-object-iteration/start.js @@ -0,0 +1,15 @@ +/** ЗАДАЧА 35 - Итерация по свойствам объекта + * + * 1. Переберите все собственные свойства объекта + * + * 2. Если имя свойства (ключ) равно "key1" или "key3", + * выведите значение свойства в консоль. + */ + +const myObject = { + key1: true, + key5: 10, + key3: 'abc', + key4: null, + key10: NaN, +} diff --git a/36-random-numbers/finish.js b/36-random-numbers/finish.js new file mode 100644 index 0000000..ebfd755 --- /dev/null +++ b/36-random-numbers/finish.js @@ -0,0 +1,20 @@ +/** ЗАДАЧА 36 - Случайные числа + * + * 1. Cгенерируйте новое 4-значное случайное число. + * Диапазон для случайного числа 1000 - 9999. + * + * 2. Убедитесь, что это новое случайное число не совпадает ни с одним из чисел в массиве myNumbers. + * + * 3. Если совпадает, вам нужно сгенерировать новое 4-значное число. + * + * 4. Если совпадений нет (новый номер уникален), добавьте его в массив myNumbers. + * + * ВАЖНО: В решении задачи используйте функции: + * - для генерации случайного числа в заданном диапазоне + * - для добавления случайного числа в массив с возвратом измененного массива + */ + +const MIN = 1000 +const MAX = 9999 + +const myNumbers = [2355, 7235, 8135, 1762, 2361, 8351] diff --git a/36-random-numbers/solution.js b/36-random-numbers/solution.js new file mode 100644 index 0000000..2b2f4dd --- /dev/null +++ b/36-random-numbers/solution.js @@ -0,0 +1,46 @@ +/** ЗАДАЧА 36 - Случайные числа + * + * 1. Cгенерируйте новое 4-значное случайное число. + * Диапазон для случайного числа 1000 - 9999. + * + * 2. Убедитесь, что это новое случайное число не совпадает ни с одним из чисел в массиве myNumbers. + * + * 3. Если совпадает, вам нужно сгенерировать новое 4-значное число. + * + * 4. Если совпадений нет (новый номер уникален), добавьте его в массив myNumbers. + * + * ВАЖНО: В решении задачи используйте функции: + * - для генерации случайного числа в заданном диапазоне + * - для добавления случайного числа в массив с возвратом измененного массива + */ + +const MIN = 1000 +const MAX = 9999 +// const MIN = 1 +// const MAX = 10 + +const myNumbers = [2355, 7235, 8135, 1762, 2361, 8351] +// const myNumbers = [1, 3, 5, 7, 9, 10] + +const randomNumber = (min, max) => { + return Math.floor(Math.random() * (max - min + 1) + min) +} + +const addRandomNumberToArray = (arr, min, max) => { + let newRandomNumber + const updatedArr = [...arr] + + do { + newRandomNumber = randomNumber(min, max) + // console.log(newRandomNumber) + } while (updatedArr.includes(newRandomNumber)) + + updatedArr.push(newRandomNumber) + + return updatedArr +} + +const updatedArray = addRandomNumberToArray(myNumbers, MIN, MAX) + +console.log('UPDATED ARRAY', updatedArray) +console.log('ORIGINAL ARRAY', myNumbers) diff --git a/36-random-numbers/start.js b/36-random-numbers/start.js new file mode 100644 index 0000000..ebfd755 --- /dev/null +++ b/36-random-numbers/start.js @@ -0,0 +1,20 @@ +/** ЗАДАЧА 36 - Случайные числа + * + * 1. Cгенерируйте новое 4-значное случайное число. + * Диапазон для случайного числа 1000 - 9999. + * + * 2. Убедитесь, что это новое случайное число не совпадает ни с одним из чисел в массиве myNumbers. + * + * 3. Если совпадает, вам нужно сгенерировать новое 4-значное число. + * + * 4. Если совпадений нет (новый номер уникален), добавьте его в массив myNumbers. + * + * ВАЖНО: В решении задачи используйте функции: + * - для генерации случайного числа в заданном диапазоне + * - для добавления случайного числа в массив с возвратом измененного массива + */ + +const MIN = 1000 +const MAX = 9999 + +const myNumbers = [2355, 7235, 8135, 1762, 2361, 8351] diff --git a/37-for-in-loop/finish.js b/37-for-in-loop/finish.js new file mode 100644 index 0000000..deb76e5 --- /dev/null +++ b/37-for-in-loop/finish.js @@ -0,0 +1,18 @@ +/** ЗАДАЧА 37 - Цикл "for .. in" + * + * Внутри цикла "for .. in" перед выводом значения свойства в консоль + * выполните проверку того, что свойство является + * собственным свойством объекта + */ + +const myObject = { + name: 'Mike', + age: 30, + city: 'London', +} + +Object.prototype.country = 'England' + +for (let key in myObject) { + console.log(myObject[key]) +} diff --git a/37-for-in-loop/solution.js b/37-for-in-loop/solution.js new file mode 100644 index 0000000..deb93ab --- /dev/null +++ b/37-for-in-loop/solution.js @@ -0,0 +1,20 @@ +/** ЗАДАЧА 37 - Цикл "for .. in" + * + * Внутри цикла "for .. in" перед выводом значения свойства в консоль + * выполните проверку того, что свойство является + * собственным свойством объекта + */ + +const myObject = { + name: 'Mike', + age: 30, + city: 'London', +} + +Object.prototype.country = 'England' + +for (let key in myObject) { + if (myObject.hasOwnProperty(key)) { + console.log(myObject[key]) + } +} diff --git a/37-for-in-loop/start.js b/37-for-in-loop/start.js new file mode 100644 index 0000000..deb76e5 --- /dev/null +++ b/37-for-in-loop/start.js @@ -0,0 +1,18 @@ +/** ЗАДАЧА 37 - Цикл "for .. in" + * + * Внутри цикла "for .. in" перед выводом значения свойства в консоль + * выполните проверку того, что свойство является + * собственным свойством объекта + */ + +const myObject = { + name: 'Mike', + age: 30, + city: 'London', +} + +Object.prototype.country = 'England' + +for (let key in myObject) { + console.log(myObject[key]) +} diff --git a/38-ternary-operator/.DS_Store b/38-ternary-operator/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/38-ternary-operator/.DS_Store differ diff --git a/38-ternary-operator/finish.js b/38-ternary-operator/finish.js new file mode 100644 index 0000000..92b6838 --- /dev/null +++ b/38-ternary-operator/finish.js @@ -0,0 +1,19 @@ +/** ЗАДАЧА 38 - Тернарный оператор + * + * 1. Перепишите инструкцию "if .. else" без использования "else" + * + * 2. Перепишите содержимое функции, используя тернарный оператор + * + * 3. Замените обычную функцию на стрелочную функцию + */ + +function isArrayEmpty(inputArray) { + if (inputArray.length > 0) { + return 'Массив не пустой' + } else { + return 'Массив пустой' + } +} + +console.log(isArrayEmpty([1, 3])) +console.log(isArrayEmpty([])) diff --git a/38-ternary-operator/solution.js b/38-ternary-operator/solution.js new file mode 100644 index 0000000..588a32d --- /dev/null +++ b/38-ternary-operator/solution.js @@ -0,0 +1,34 @@ +/** ЗАДАЧА 38 - Тернарный оператор + * + * 1. Перепишите инструкцию "if .. else" без использования "else" + * + * 2. Перепишите содержимое функции, используя тернарный оператор + * + * 3. Замените обычную функцию на стрелочную функцию + */ + +// // ПОДЗАДАЧА 1 +// function isArrayEmpty(inputArray) { +// if (inputArray.length > 0) { +// return 'Массив не пустой' +// } + +// return 'Массив пустой' +// } + +// // ПОДЗАДАЧА 2 +// function isArrayEmpty(inputArray) { +// return inputArray.length > 0 ? 'Массив не пустой' : 'Массив пустой' +// } + +// // ПОДЗАДАЧА 3 - Явный возврат результата +// const isArrayEmpty = (inputArray) => { +// return inputArray.length > 0 ? 'Массив не пустой' : 'Массив пустой' +// } + +// ПОДЗАДАЧА 3 - Неявный возврат результата +const isArrayEmpty = (inputArray) => + inputArray.length > 0 ? 'Массив не пустой' : 'Массив пустой' + +console.log(isArrayEmpty([1, 3])) +console.log(isArrayEmpty([])) diff --git a/38-ternary-operator/start.js b/38-ternary-operator/start.js new file mode 100644 index 0000000..92b6838 --- /dev/null +++ b/38-ternary-operator/start.js @@ -0,0 +1,19 @@ +/** ЗАДАЧА 38 - Тернарный оператор + * + * 1. Перепишите инструкцию "if .. else" без использования "else" + * + * 2. Перепишите содержимое функции, используя тернарный оператор + * + * 3. Замените обычную функцию на стрелочную функцию + */ + +function isArrayEmpty(inputArray) { + if (inputArray.length > 0) { + return 'Массив не пустой' + } else { + return 'Массив пустой' + } +} + +console.log(isArrayEmpty([1, 3])) +console.log(isArrayEmpty([])) diff --git a/39-foreach-with-index/finish.js b/39-foreach-with-index/finish.js new file mode 100644 index 0000000..64ce8f6 --- /dev/null +++ b/39-foreach-with-index/finish.js @@ -0,0 +1,12 @@ +/** ЗАДАЧА 39 - Перебор элементов массива + * + * 1. Создайте функцию "cityInfo" с двумя параметрами, + * которая возвращает строку + * "London is at the index 0 in the myCities array" + * + * 2. Переберите все элементы массива "myCities", + * для каждого элемента вызовите функцию "cityInfo" + * и выведите в консоль результат вызова функции + */ + +const myCities = ['London', 'New York', 'Singapore'] diff --git a/39-foreach-with-index/solution.js b/39-foreach-with-index/solution.js new file mode 100644 index 0000000..46fd481 --- /dev/null +++ b/39-foreach-with-index/solution.js @@ -0,0 +1,17 @@ +/** ЗАДАЧА 39 - Перебор элементов массива + * + * 1. Создайте функцию "cityInfo" с двумя параметрами, + * которая возвращает строку + * "London is at the index 0 in the myCities array" + * + * 2. Переберите все элементы массива "myCities", + * для каждого элемента вызовите функцию "cityInfo" + * и выведите в консоль результат вызова функции + */ + +const myCities = ['London', 'New York', 'Singapore'] + +const cityInfo = (city, index) => + `${city} is at the index ${index} in the myCities array` + +myCities.forEach((city, index) => console.log(cityInfo(city, index))) diff --git a/39-foreach-with-index/start.js b/39-foreach-with-index/start.js new file mode 100644 index 0000000..64ce8f6 --- /dev/null +++ b/39-foreach-with-index/start.js @@ -0,0 +1,12 @@ +/** ЗАДАЧА 39 - Перебор элементов массива + * + * 1. Создайте функцию "cityInfo" с двумя параметрами, + * которая возвращает строку + * "London is at the index 0 in the myCities array" + * + * 2. Переберите все элементы массива "myCities", + * для каждого элемента вызовите функцию "cityInfo" + * и выведите в консоль результат вызова функции + */ + +const myCities = ['London', 'New York', 'Singapore'] diff --git a/40-map-json-to-object/finish.js b/40-map-json-to-object/finish.js new file mode 100644 index 0000000..e981788 --- /dev/null +++ b/40-map-json-to-object/finish.js @@ -0,0 +1,17 @@ +/** ЗАДАЧА 40 - Конвертация JSON в JavaScript объекты + * + * 1. Конвертируйте массив JSON объектов в массив объектов JavaScript + * + * 2. Выведите в консоль результирующий массив + * + * 3. Выведите в консоль "postId" второго объекта + * + * 4. Выведите в консоль "commentsQuantity" последнего объекта + */ + +const postsJSON = [ + '{"postId":1355,"commentsQuantity":5}', + '{"postId":5131,"commentsQuantity":13}', + '{"postId":6134,"commentsQuantity":2}', + '{"postId":2351,"commentsQuantity":8}', +] diff --git a/40-map-json-to-object/solution.js b/40-map-json-to-object/solution.js new file mode 100644 index 0000000..b802e06 --- /dev/null +++ b/40-map-json-to-object/solution.js @@ -0,0 +1,30 @@ +/** ЗАДАЧА 40 - Конвертация JSON в JavaScript объекты + * + * 1. Конвертируйте массив JSON объектов в массив объектов JavaScript + * + * 2. Выведите в консоль результирующий массив + * + * 3. Выведите в консоль "postId" второго объекта + * + * 4. Выведите в консоль "commentsQuantity" последнего объекта + */ + +const postsJSON = [ + '{"postId":1355,"commentsQuantity":5}', + '{"postId":5131,"commentsQuantity":13}', + '{"postId":6134,"commentsQuantity":2}', + '{"postId":2351,"commentsQuantity":8}', +] + +// // OPTION 1 +// const postsJS = postsJSON.map((post) => JSON.parse(post)) + +// OPTION 2 +const postsJS = postsJSON.map(JSON.parse) + +// console.log(postsJSON) +console.log(postsJS) + +console.log(postsJS[1].postId) + +console.log(postsJS[postsJS.length - 1].commentsQuantity) diff --git a/40-map-json-to-object/start.js b/40-map-json-to-object/start.js new file mode 100644 index 0000000..e981788 --- /dev/null +++ b/40-map-json-to-object/start.js @@ -0,0 +1,17 @@ +/** ЗАДАЧА 40 - Конвертация JSON в JavaScript объекты + * + * 1. Конвертируйте массив JSON объектов в массив объектов JavaScript + * + * 2. Выведите в консоль результирующий массив + * + * 3. Выведите в консоль "postId" второго объекта + * + * 4. Выведите в консоль "commentsQuantity" последнего объекта + */ + +const postsJSON = [ + '{"postId":1355,"commentsQuantity":5}', + '{"postId":5131,"commentsQuantity":13}', + '{"postId":6134,"commentsQuantity":2}', + '{"postId":2351,"commentsQuantity":8}', +] diff --git a/41-find-single-post/finish.js b/41-find-single-post/finish.js new file mode 100644 index 0000000..4087016 --- /dev/null +++ b/41-find-single-post/finish.js @@ -0,0 +1,23 @@ +/** ЗАДАЧА 41 - Поиск объектов в массиве + * + * 1. Создайте функцию "findPostById" с двумя параметрами: + * - ID поста + * - массив постов + * + * 2. Функция должна вернуть пост с определенным ID + * + * 3. Если поста с определенным ID в массиве постов нет, + * функция должна вернуть "undefined" + * + * 4. Также внутри функции выведите в консоль ID поста + */ + +const posts = [ + { postId: 1355, commentsQuantity: 5 }, + { postId: 5131, commentsQuantity: 13 }, + { postId: 6134, commentsQuantity: 2 }, +] + +console.log(findPostById(6134, posts)) // { postId: 6134, commentsQuantity: 2 } + +console.log(findPostById(4511, posts)) // undefined diff --git a/41-find-single-post/solution.js b/41-find-single-post/solution.js new file mode 100644 index 0000000..750a5ea --- /dev/null +++ b/41-find-single-post/solution.js @@ -0,0 +1,27 @@ +/** ЗАДАЧА 41 - Поиск объектов в массиве + * + * 1. Создайте функцию "findPostById" с двумя параметрами: + * - ID поста + * - массив постов + * + * 2. Функция должна вернуть пост с определенным ID + * + * 3. Если поста с определенным ID в массиве постов нет, + * функция должна вернуть "undefined" + * + * 4. Также внутри функции выведите в консоль ID поста + */ + +function findPostById(postId, posts) { + return posts.find((post) => post.postId === postId) +} + +const posts = [ + { postId: 1355, commentsQuantity: 5 }, + { postId: 5131, commentsQuantity: 13 }, + { postId: 6134, commentsQuantity: 2 }, +] + +console.log(findPostById(6134, posts)) // { postId: 6134, commentsQuantity: 2 } + +console.log(findPostById(4511, posts)) // undefined diff --git a/41-find-single-post/start.js b/41-find-single-post/start.js new file mode 100644 index 0000000..4087016 --- /dev/null +++ b/41-find-single-post/start.js @@ -0,0 +1,23 @@ +/** ЗАДАЧА 41 - Поиск объектов в массиве + * + * 1. Создайте функцию "findPostById" с двумя параметрами: + * - ID поста + * - массив постов + * + * 2. Функция должна вернуть пост с определенным ID + * + * 3. Если поста с определенным ID в массиве постов нет, + * функция должна вернуть "undefined" + * + * 4. Также внутри функции выведите в консоль ID поста + */ + +const posts = [ + { postId: 1355, commentsQuantity: 5 }, + { postId: 5131, commentsQuantity: 13 }, + { postId: 6134, commentsQuantity: 2 }, +] + +console.log(findPostById(6134, posts)) // { postId: 6134, commentsQuantity: 2 } + +console.log(findPostById(4511, posts)) // undefined diff --git a/42-is-array-sorted-or-not/finish.js b/42-is-array-sorted-or-not/finish.js new file mode 100644 index 0000000..251ab5a --- /dev/null +++ b/42-is-array-sorted-or-not/finish.js @@ -0,0 +1,43 @@ +/** ЗАДАЧА 42 - Проверка сортировки массива + * + * 1. Создайте функцию "arraySortInfo" с одним параметром - "inputArray" + * + * 2. Если хотя бы один элемент в массиве не является числом - вернуть "Некоторые элементы не являются числами" + * + * 3. Если числа в массиве отсортированы по возрастанию - вернуть "Массив отсортирован по возрастанию" + * + * 4. Если числа в массиве отсортированы по убыванию - вернуть "Массив отсортирован по убыванию". + * + * 5. Если массив не отсортирован - вернуть "Массив не отсортирован" + */ + +const a = [5, 'abc', 10, 1] +const b = [4, 10, 14, 25, 25, 50] +const c = [150, 132, 80, 40] +const d = [15, 26, 10, 23, 85] + +console.log(arraySortInfo(a)) // Некоторые элементы не являются числами +console.log(arraySortInfo(b)) // Массив отсортирован по возрастанию +console.log(arraySortInfo(c)) // Массив отсортирован по убыванию +console.log(arraySortInfo(d)) // Массив не отсортирован + +/** + * ПОДСКАЗКИ + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * Подсказка 1: Используйте метод массивов "every" + * Подсказка 2: Вы должны использовать два параметра в колбэк функции "element", "index" + * Подсказка 3: Каждый элемент массива, кроме первого, следует сравнивать с предыдущим + */ diff --git a/42-is-array-sorted-or-not/solution.js b/42-is-array-sorted-or-not/solution.js new file mode 100644 index 0000000..630af07 --- /dev/null +++ b/42-is-array-sorted-or-not/solution.js @@ -0,0 +1,67 @@ +/** ЗАДАЧА 42 - Проверка сортировки массива + * + * 1. Создайте функцию "arraySortInfo" с одним параметром - "inputArray" + * + * 2. Если хотя бы один элемент в массиве не является числом - вернуть "Некоторые элементы не являются числами" + * + * 3. Если числа в массиве отсортированы по возрастанию - вернуть "Массив отсортирован по возрастанию" + * + * 4. Если числа в массиве отсортированы по убыванию - вернуть "Массив отсортирован по убыванию". + * + * 5. Если массив не отсортирован - вернуть "Массив не отсортирован" + */ + +const arraySortInfo = (inputArray) => { + if (inputArray.some((element) => typeof element !== 'number')) { + return 'Некоторые элементы не являются числами' + } + + if ( + inputArray.every((element, index) => + index > 0 ? element >= inputArray[index - 1] : true + ) + ) { + return 'Массив отсортирован по возрастанию' + } + + if ( + inputArray.every((element, index) => + index > 0 ? element <= inputArray[index - 1] : true + ) + ) { + return 'Массив отсортирован по убыванию' + } + + return 'Массив не отсортирован' +} + +const a = [5, 'abc', 10, 1] +const b = [4, 10, 14, 25, 25, 50] +const c = [150, 132, 80, 40] +const d = [15, 26, 10, 23, 85] + +console.log(arraySortInfo(a)) // Некоторые элементы не являются числами +console.log(arraySortInfo(b)) // Массив отсортирован по возрастанию +console.log(arraySortInfo(c)) // Массив отсортирован по убыванию +console.log(arraySortInfo(d)) // Массив не отсортирован + +/** + * ПОДСКАЗКИ + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * Подсказка 1: Используйте метод массивов "every" + * Подсказка 2: Вы должны использовать два параметра в колбэк функции "element", "index" + * Подсказка 3: Каждый элемент массива, кроме первого, следует сравнивать с предыдущим + */ diff --git a/42-is-array-sorted-or-not/start.js b/42-is-array-sorted-or-not/start.js new file mode 100644 index 0000000..251ab5a --- /dev/null +++ b/42-is-array-sorted-or-not/start.js @@ -0,0 +1,43 @@ +/** ЗАДАЧА 42 - Проверка сортировки массива + * + * 1. Создайте функцию "arraySortInfo" с одним параметром - "inputArray" + * + * 2. Если хотя бы один элемент в массиве не является числом - вернуть "Некоторые элементы не являются числами" + * + * 3. Если числа в массиве отсортированы по возрастанию - вернуть "Массив отсортирован по возрастанию" + * + * 4. Если числа в массиве отсортированы по убыванию - вернуть "Массив отсортирован по убыванию". + * + * 5. Если массив не отсортирован - вернуть "Массив не отсортирован" + */ + +const a = [5, 'abc', 10, 1] +const b = [4, 10, 14, 25, 25, 50] +const c = [150, 132, 80, 40] +const d = [15, 26, 10, 23, 85] + +console.log(arraySortInfo(a)) // Некоторые элементы не являются числами +console.log(arraySortInfo(b)) // Массив отсортирован по возрастанию +console.log(arraySortInfo(c)) // Массив отсортирован по убыванию +console.log(arraySortInfo(d)) // Массив не отсортирован + +/** + * ПОДСКАЗКИ + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * Подсказка 1: Используйте метод массивов "every" + * Подсказка 2: Вы должны использовать два параметра в колбэк функции "element", "index" + * Подсказка 3: Каждый элемент массива, кроме первого, следует сравнивать с предыдущим + */ diff --git a/43-compare-two-arrays/finish.js b/43-compare-two-arrays/finish.js new file mode 100644 index 0000000..3ecfce4 --- /dev/null +++ b/43-compare-two-arrays/finish.js @@ -0,0 +1,24 @@ +/** ЗАДАЧА 43 - Сравнение двух массивов + * + * 1. Создайте функцию "areArraysEqual" с двумя параметрами "firstArray" и "secondArray" + * + * 2. Верните "true" если два массива равны, а именно: + * - имеют одинаковое количество элементов + * - все элементы совпадают, например, firstArray[0] === secondArray[0] и т. д.) + * + * 3. В противном случае верните "false" + * + * ВАЖНО: Исходите из того, что массивы содержат элементы примитивных типов + */ + +const a = [1, 2, 3] +const b = [1, 2, 3] + +console.log(a === b) // false (Почему?) + +const c = [2, 1, 3] +const d = [1, 2, 3, 4] + +console.log(areArraysEqual(a, b)) // true +console.log(areArraysEqual(a, c)) // false +console.log(areArraysEqual(a, d)) // false diff --git a/43-compare-two-arrays/solution.js b/43-compare-two-arrays/solution.js new file mode 100644 index 0000000..fd56235 --- /dev/null +++ b/43-compare-two-arrays/solution.js @@ -0,0 +1,35 @@ +/** ЗАДАЧА 43 - Сравнение двух массивов + * + * 1. Создайте функцию "areArraysEqual" с двумя параметрами "firstArray" и "secondArray" + * + * 2. Верните "true" если два массива равны, а именно: + * - имеют одинаковое количество элементов + * - все элементы совпадают, например, firstArray[0] === secondArray[0] и т. д.) + * + * 3. В противном случае верните "false" + * + * ВАЖНО: Исходите из того, что массивы содержат элементы примитивных типов + */ + +const areArraysEqual = (firstArray, secondArray) => { + if ( + firstArray.length === secondArray.length && + firstArray.every((element, index) => element === secondArray[index]) + ) { + return true + } + + return false +} + +const a = [1, 2, 3] +const b = [1, 2, 3] + +console.log(a === b) // false (Почему?) -- Объект - это ссылочный тип + +const c = [2, 1, 3] +const d = [1, 2, 3, 4] + +console.log(areArraysEqual(a, b)) // true +console.log(areArraysEqual(a, c)) // false +console.log(areArraysEqual(a, d)) // false diff --git a/43-compare-two-arrays/start.js b/43-compare-two-arrays/start.js new file mode 100644 index 0000000..3ecfce4 --- /dev/null +++ b/43-compare-two-arrays/start.js @@ -0,0 +1,24 @@ +/** ЗАДАЧА 43 - Сравнение двух массивов + * + * 1. Создайте функцию "areArraysEqual" с двумя параметрами "firstArray" и "secondArray" + * + * 2. Верните "true" если два массива равны, а именно: + * - имеют одинаковое количество элементов + * - все элементы совпадают, например, firstArray[0] === secondArray[0] и т. д.) + * + * 3. В противном случае верните "false" + * + * ВАЖНО: Исходите из того, что массивы содержат элементы примитивных типов + */ + +const a = [1, 2, 3] +const b = [1, 2, 3] + +console.log(a === b) // false (Почему?) + +const c = [2, 1, 3] +const d = [1, 2, 3, 4] + +console.log(areArraysEqual(a, b)) // true +console.log(areArraysEqual(a, c)) // false +console.log(areArraysEqual(a, d)) // false diff --git a/44-element-is-in-array/finish.js b/44-element-is-in-array/finish.js new file mode 100644 index 0000000..9fe9c19 --- /dev/null +++ b/44-element-is-in-array/finish.js @@ -0,0 +1,14 @@ +/** ЗАДАЧА 44 - Поиск элементов примитивных типов в массиве + * + * 1. Создайте функцию isElementInArray с двумя параметрами "inputArray" и "searchElement" + * + * 2. Если "searchElement" найден в "inputArray" - вернуть "true" + * + * 3. В противном случае вернуть "false" + */ + +const transports = ['Bus', 'Car', 'Bicycle', 'Airplane'] + +console.log(isElementInArray(transports, 'Bus')) // true +console.log(isElementInArray(transports, 'Phone')) // false +console.log(isElementInArray(transports, 'Airplane')) // true diff --git a/44-element-is-in-array/solution.js b/44-element-is-in-array/solution.js new file mode 100644 index 0000000..f3e6569 --- /dev/null +++ b/44-element-is-in-array/solution.js @@ -0,0 +1,18 @@ +/** ЗАДАЧА 44 - Поиск элементов примитивных типов в массиве + * + * 1. Создайте функцию isElementInArray с двумя параметрами "inputArray" и "searchElement" + * + * 2. Если "searchElement" найден в "inputArray" - вернуть "true" + * + * 3. В противном случае вернуть "false" + */ + +function isElementInArray(inputArray, searchElement) { + return inputArray.includes(searchElement) +} + +const transports = ['Bus', 'Car', 'Bicycle', 'Airplane'] + +console.log(isElementInArray(transports, 'Bus')) // true +console.log(isElementInArray(transports, 'Phone')) // false +console.log(isElementInArray(transports, 'Airplane')) // true diff --git a/44-element-is-in-array/start.js b/44-element-is-in-array/start.js new file mode 100644 index 0000000..9fe9c19 --- /dev/null +++ b/44-element-is-in-array/start.js @@ -0,0 +1,14 @@ +/** ЗАДАЧА 44 - Поиск элементов примитивных типов в массиве + * + * 1. Создайте функцию isElementInArray с двумя параметрами "inputArray" и "searchElement" + * + * 2. Если "searchElement" найден в "inputArray" - вернуть "true" + * + * 3. В противном случае вернуть "false" + */ + +const transports = ['Bus', 'Car', 'Bicycle', 'Airplane'] + +console.log(isElementInArray(transports, 'Bus')) // true +console.log(isElementInArray(transports, 'Phone')) // false +console.log(isElementInArray(transports, 'Airplane')) // true diff --git a/45-includes-object-or-array/finish.js b/45-includes-object-or-array/finish.js new file mode 100644 index 0000000..a8e9907 --- /dev/null +++ b/45-includes-object-or-array/finish.js @@ -0,0 +1,34 @@ +/** ЗАДАЧА 45 - Поиск элементов в массивах + * + * 1. Создайте функцию isElementInArray с двумя параметрами "searchElement" и "inputArray" + * + * 2. Если "searchElement" - не объект, просто используйте метод "includes" + * + * 3. Если "searchElement" - это объект или массив, + * вам необходимо сначала преобразовать каждый элемент "inputArray" в строку, + * а затем применить метод "includes" с аргументом, который также будет преобразован в строку + */ + +const tags = [ + ['javascript', 'es6'], + ['css', 'flexbox'], + ['html', 'web-browser'], +] + +const fruits = [ + { title: 'Orange', quantity: 10 }, + { title: 'Banana', quantity: 5 }, + { title: 'Apple', quantity: 25 }, +] + +const primitiveTypesArray = [25, 'x', true, undefined, null] + +console.log(isElementInArray(['css', 'flexbox'], tags)) // true + +console.log(isElementInArray(['flexbox', 'css'], tags)) // false + +console.log(isElementInArray({ title: 'Apple', quantity: 25 }, fruits)) // true + +console.log(isElementInArray({ title: 'Banana' }, fruits)) // false + +console.log(isElementInArray(25, primitiveTypesArray)) // true diff --git a/45-includes-object-or-array/solution.js b/45-includes-object-or-array/solution.js new file mode 100644 index 0000000..144b0d4 --- /dev/null +++ b/45-includes-object-or-array/solution.js @@ -0,0 +1,44 @@ +/** ЗАДАЧА 45 - Поиск элементов в массивах + * + * 1. Создайте функцию isElementInArray с двумя параметрами "searchElement" и "inputArray" + * + * 2. Если "searchElement" - не объект, просто используйте метод "includes" + * + * 3. Если "searchElement" - это объект или массив, + * вам необходимо сначала преобразовать каждый элемент "inputArray" в строку, + * а затем применить метод "includes" с аргументом, который также будет преобразован в строку + */ + +function isElementInArray(searchElement, inputArray) { + if (typeof searchElement !== 'object') { + return inputArray.includes(searchElement) + } + + return inputArray + .map((element) => JSON.stringify(element)) + .includes(JSON.stringify(searchElement)) +} + +const tags = [ + ['javascript', 'es6'], + ['css', 'flexbox'], + ['html', 'web-browser'], +] + +const fruits = [ + { title: 'Orange', quantity: 10 }, + { title: 'Banana', quantity: 5 }, + { title: 'Apple', quantity: 25 }, +] + +const primitiveTypesArray = [25, 'x', true, undefined, null] + +console.log(isElementInArray(['css', 'flexbox'], tags)) // true + +console.log(isElementInArray(['flexbox', 'css'], tags)) // false + +console.log(isElementInArray({ title: 'Apple', quantity: 25 }, fruits)) // true + +console.log(isElementInArray({ title: 'Banana' }, fruits)) // false + +console.log(isElementInArray(25, primitiveTypesArray)) // true diff --git a/45-includes-object-or-array/start.js b/45-includes-object-or-array/start.js new file mode 100644 index 0000000..a8e9907 --- /dev/null +++ b/45-includes-object-or-array/start.js @@ -0,0 +1,34 @@ +/** ЗАДАЧА 45 - Поиск элементов в массивах + * + * 1. Создайте функцию isElementInArray с двумя параметрами "searchElement" и "inputArray" + * + * 2. Если "searchElement" - не объект, просто используйте метод "includes" + * + * 3. Если "searchElement" - это объект или массив, + * вам необходимо сначала преобразовать каждый элемент "inputArray" в строку, + * а затем применить метод "includes" с аргументом, который также будет преобразован в строку + */ + +const tags = [ + ['javascript', 'es6'], + ['css', 'flexbox'], + ['html', 'web-browser'], +] + +const fruits = [ + { title: 'Orange', quantity: 10 }, + { title: 'Banana', quantity: 5 }, + { title: 'Apple', quantity: 25 }, +] + +const primitiveTypesArray = [25, 'x', true, undefined, null] + +console.log(isElementInArray(['css', 'flexbox'], tags)) // true + +console.log(isElementInArray(['flexbox', 'css'], tags)) // false + +console.log(isElementInArray({ title: 'Apple', quantity: 25 }, fruits)) // true + +console.log(isElementInArray({ title: 'Banana' }, fruits)) // false + +console.log(isElementInArray(25, primitiveTypesArray)) // true diff --git a/46-push-to-array-if-not-exists/finish.js b/46-push-to-array-if-not-exists/finish.js new file mode 100644 index 0000000..0d83e27 --- /dev/null +++ b/46-push-to-array-if-not-exists/finish.js @@ -0,0 +1,25 @@ +/** ЗАДАЧА 46 - Добавление уникальных элементов в массив + * + * 1. Создайте функцию "pushIfUnique" с двумя параметрами "inputArray" и "newElement" + * + * 2. Если "inputArray" уже содержит "newElement", + * выведите в консоль "{newElement} уже находится в массиве" + * + * 3. В противном случае добавьте "newElement" в "inputArray" + * + * ПРИМЕЧАНИЕ: Мы предполагаем, что "inputArray" содержит элементы только примитивных типов + */ + +const myNumbers = [123, 50, 27] + +pushIfUnique(myNumbers, 50) // "50 уже в массиве" +console.log(myNumbers) // [123, 50, 27] + +pushIfUnique(myNumbers, 80) +console.log(myNumbers) // [123, 50, 27, 80] + +pushIfUnique(myNumbers, 80) // "80 уже в массиве" +console.log(myNumbers) // [123, 50, 27, 80] + +pushIfUnique(myNumbers, 77) +console.log(myNumbers) // [123, 50, 27, 80, 77] diff --git a/46-push-to-array-if-not-exists/solution.js b/46-push-to-array-if-not-exists/solution.js new file mode 100644 index 0000000..03bf061 --- /dev/null +++ b/46-push-to-array-if-not-exists/solution.js @@ -0,0 +1,33 @@ +/** ЗАДАЧА 46 - Добавление уникальных элементов в массив + * + * 1. Создайте функцию "pushIfUnique" с двумя параметрами "inputArray" и "newElement" + * + * 2. Если "inputArray" уже содержит "newElement", + * выведите в консоль "{newElement} уже находится в массиве" + * + * 3. В противном случае добавьте "newElement" в "inputArray" + * + * ПРИМЕЧАНИЕ: Мы предполагаем, что "inputArray" содержит элементы только примитивных типов + */ + +const pushIfUnique = (inputArray, newElement) => { + if (inputArray.includes(newElement)) { + return console.log(`${newElement} уже находится в массиве`) + } + + inputArray.push(newElement) +} + +const myNumbers = [123, 50, 27] + +pushIfUnique(myNumbers, 50) // "50 уже в массиве" +console.log(myNumbers) // [123, 50, 27] + +pushIfUnique(myNumbers, 80) +console.log(myNumbers) // [123, 50, 27, 80] + +pushIfUnique(myNumbers, 80) // "80 уже в массиве" +console.log(myNumbers) // [123, 50, 27, 80] + +pushIfUnique(myNumbers, 77) +console.log(myNumbers) // [123, 50, 27, 80, 77] diff --git a/46-push-to-array-if-not-exists/start.js b/46-push-to-array-if-not-exists/start.js new file mode 100644 index 0000000..0d83e27 --- /dev/null +++ b/46-push-to-array-if-not-exists/start.js @@ -0,0 +1,25 @@ +/** ЗАДАЧА 46 - Добавление уникальных элементов в массив + * + * 1. Создайте функцию "pushIfUnique" с двумя параметрами "inputArray" и "newElement" + * + * 2. Если "inputArray" уже содержит "newElement", + * выведите в консоль "{newElement} уже находится в массиве" + * + * 3. В противном случае добавьте "newElement" в "inputArray" + * + * ПРИМЕЧАНИЕ: Мы предполагаем, что "inputArray" содержит элементы только примитивных типов + */ + +const myNumbers = [123, 50, 27] + +pushIfUnique(myNumbers, 50) // "50 уже в массиве" +console.log(myNumbers) // [123, 50, 27] + +pushIfUnique(myNumbers, 80) +console.log(myNumbers) // [123, 50, 27, 80] + +pushIfUnique(myNumbers, 80) // "80 уже в массиве" +console.log(myNumbers) // [123, 50, 27, 80] + +pushIfUnique(myNumbers, 77) +console.log(myNumbers) // [123, 50, 27, 80, 77] diff --git a/47-reduce-array-of-objects/finish.js b/47-reduce-array-of-objects/finish.js new file mode 100644 index 0000000..e6dc924 --- /dev/null +++ b/47-reduce-array-of-objects/finish.js @@ -0,0 +1,31 @@ +/** ЗАДАЧА 47 - Использование метода "reduce" для создания массива + * + * 1. Создайте функцию "popularPostsIds" с двумя параметрами "posts" и "minimalComentsQty" + * + * 2. Эта функция "popularPostsIds" должна возвращать массив идентификаторов постов сообщений, + * у которых количество комментариев не меньше "minimalComentsQty" + */ + +const inputPosts = [ + { + title: 'Как быстро выучить JavaScript?', + postId: 3421, + comments: 25, + }, + { + title: 'Где используется JavaScript?', + postId: 5216, + comments: 3, + }, + { + title: 'Какая разница между React и Angular?', + postId: 8135, + comments: 12, + }, +] + +console.log(popularPostsIds(inputPosts, 10)) // [3421, 8135] + +console.log(popularPostsIds(inputPosts, 15)) // [3421] + +console.log(popularPostsIds(inputPosts, 50)) // [] diff --git a/47-reduce-array-of-objects/solution.js b/47-reduce-array-of-objects/solution.js new file mode 100644 index 0000000..214cdd5 --- /dev/null +++ b/47-reduce-array-of-objects/solution.js @@ -0,0 +1,41 @@ +/** ЗАДАЧА 47 - Использование метода "reduce" для создания массива + * + * 1. Создайте функцию "popularPostsIds" с двумя параметрами "posts" и "minimalComentsQty" + * + * 2. Эта функция "popularPostsIds" должна возвращать массив идентификаторов постов сообщений, + * у которых количество комментариев не меньше "minimalComentsQty" + */ + +function popularPostsIds(posts, minimalComentsQty) { + return posts.reduce( + (postsIds, post) => + post.comments >= minimalComentsQty + ? postsIds.concat([post.postId]) + : postsIds, + [] + ) +} + +const inputPosts = [ + { + title: 'Как быстро выучить JavaScript?', + postId: 3421, + comments: 25, + }, + { + title: 'Где используется JavaScript?', + postId: 5216, + comments: 3, + }, + { + title: 'Какая разница между React и Angular?', + postId: 8135, + comments: 12, + }, +] + +console.log(popularPostsIds(inputPosts, 10)) // [3421, 8135] + +console.log(popularPostsIds(inputPosts, 15)) // [3421] + +console.log(popularPostsIds(inputPosts, 50)) // [] diff --git a/47-reduce-array-of-objects/start.js b/47-reduce-array-of-objects/start.js new file mode 100644 index 0000000..e6dc924 --- /dev/null +++ b/47-reduce-array-of-objects/start.js @@ -0,0 +1,31 @@ +/** ЗАДАЧА 47 - Использование метода "reduce" для создания массива + * + * 1. Создайте функцию "popularPostsIds" с двумя параметрами "posts" и "minimalComentsQty" + * + * 2. Эта функция "popularPostsIds" должна возвращать массив идентификаторов постов сообщений, + * у которых количество комментариев не меньше "minimalComentsQty" + */ + +const inputPosts = [ + { + title: 'Как быстро выучить JavaScript?', + postId: 3421, + comments: 25, + }, + { + title: 'Где используется JavaScript?', + postId: 5216, + comments: 3, + }, + { + title: 'Какая разница между React и Angular?', + postId: 8135, + comments: 12, + }, +] + +console.log(popularPostsIds(inputPosts, 10)) // [3421, 8135] + +console.log(popularPostsIds(inputPosts, 15)) // [3421] + +console.log(popularPostsIds(inputPosts, 50)) // [] diff --git a/48-reduce-to-object/finish.js b/48-reduce-to-object/finish.js new file mode 100644 index 0000000..81a8cda --- /dev/null +++ b/48-reduce-to-object/finish.js @@ -0,0 +1,42 @@ +/** ЗАДАЧА 48 - Использование метода "reduce" для создания объекта + * + * 1. Создайте функцию "quantitiesByCategories" с одним параметром "products" + * + * 2. Эта функция должна возвращать объект с ключами, + * равными категориям, и значениями, + * равными сумме всех количеств в каждой категории + */ + +const inputProducts = [ + { + title: 'Phone case', + price: 23, + quantity: 2, + category: 'Accessories', + }, + { + title: 'Android phone', + price: 150, + quantity: 1, + category: 'Phones', + }, + { + title: 'Headphones', + price: 78, + quantity: 1, + category: 'Accessories', + }, + { + title: 'Sport Watch', + price: 55, + quantity: 2, + category: 'Watches', + }, +] + +console.log(quantitiesByCategories(inputProducts)) +/* { + Accessories: 3, + Phones: 1, + Watches: 2 +} */ diff --git a/48-reduce-to-object/solution.js b/48-reduce-to-object/solution.js new file mode 100644 index 0000000..74bd30f --- /dev/null +++ b/48-reduce-to-object/solution.js @@ -0,0 +1,52 @@ +/** ЗАДАЧА 48 - Использование метода "reduce" для создания объекта + * + * 1. Создайте функцию "quantitiesByCategories" с одним параметром "products" + * + * 2. Эта функция должна возвращать объект с ключами, + * равными категориям, и значениями, + * равными сумме всех количеств в каждой категории + */ + +function quantitiesByCategories(products) { + return products.reduce((qtysByCategories, product) => { + const { category, quantity } = product + + qtysByCategories[category] = (qtysByCategories[category] || 0) + quantity + + return qtysByCategories + }, {}) +} + +const inputProducts = [ + { + title: 'Phone case', + price: 23, + quantity: 2, + category: 'Accessories', + }, + { + title: 'Android phone', + price: 150, + quantity: 1, + category: 'Phones', + }, + { + title: 'Headphones', + price: 78, + quantity: 1, + category: 'Accessories', + }, + { + title: 'Sport Watch', + price: 55, + quantity: 2, + category: 'Watches', + }, +] + +console.log(quantitiesByCategories(inputProducts)) +/* { + Accessories: 3, + Phones: 1, + Watches: 2 +} */ diff --git a/48-reduce-to-object/start.js b/48-reduce-to-object/start.js new file mode 100644 index 0000000..81a8cda --- /dev/null +++ b/48-reduce-to-object/start.js @@ -0,0 +1,42 @@ +/** ЗАДАЧА 48 - Использование метода "reduce" для создания объекта + * + * 1. Создайте функцию "quantitiesByCategories" с одним параметром "products" + * + * 2. Эта функция должна возвращать объект с ключами, + * равными категориям, и значениями, + * равными сумме всех количеств в каждой категории + */ + +const inputProducts = [ + { + title: 'Phone case', + price: 23, + quantity: 2, + category: 'Accessories', + }, + { + title: 'Android phone', + price: 150, + quantity: 1, + category: 'Phones', + }, + { + title: 'Headphones', + price: 78, + quantity: 1, + category: 'Accessories', + }, + { + title: 'Sport Watch', + price: 55, + quantity: 2, + category: 'Watches', + }, +] + +console.log(quantitiesByCategories(inputProducts)) +/* { + Accessories: 3, + Phones: 1, + Watches: 2 +} */ diff --git a/49-sort-array-of-objects/finish.js b/49-sort-array-of-objects/finish.js new file mode 100644 index 0000000..1ee9a4f --- /dev/null +++ b/49-sort-array-of-objects/finish.js @@ -0,0 +1,43 @@ +/** ЗАДАЧА 49 - Сортировка объектов в массиве + * + * 1. Создайте функцию "sortProductsByPrice" с одним параметром "products" + * + * 2. Эта функция должна отсортировать входной массив товаров + * по цене каждого товара в порядке возрастания + * и вернуть отсортированный массив + * + * 3. Оригинальный массив должен остаться без изменений + */ + +const inputProducts = [ + { + title: 'Phone case', + price: 23, + quantity: 2, + category: 'Accessories', + }, + { + title: 'Android phone', + price: 150, + quantity: 1, + category: 'Phones', + }, + { + title: 'Headphones', + price: 78, + quantity: 1, + category: 'Accessories', + }, + { + title: 'Sport Watch', + price: 55, + quantity: 2, + category: 'Watches', + }, +] + +// const sortedProducts = sortProductsByPrice(inputProducts) + +// console.log(sortedProducts) // Массив отсортированных товаров + +// console.log(inputProducts) // Оригинальный массив не должен измениться diff --git a/49-sort-array-of-objects/solution.js b/49-sort-array-of-objects/solution.js new file mode 100644 index 0000000..3caae36 --- /dev/null +++ b/49-sort-array-of-objects/solution.js @@ -0,0 +1,46 @@ +/** ЗАДАЧА 49 - Сортировка объектов в массиве + * + * 1. Создайте функцию "sortProductsByPrice" с одним параметром "products" + * + * 2. Эта функция должна отсортировать входной массив товаров + * по цене каждого товара в порядке возрастания + * и вернуть отсортированный массив + * + * 3. Оригинальный массив должен остаться без изменений + */ + +const inputProducts = [ + { + title: 'Phone case', + price: 23, + quantity: 2, + category: 'Accessories', + }, + { + title: 'Android phone', + price: 150, + quantity: 1, + category: 'Phones', + }, + { + title: 'Headphones', + price: 78, + quantity: 1, + category: 'Accessories', + }, + { + title: 'Sport Watch', + price: 55, + quantity: 2, + category: 'Watches', + }, +] + +const sortProductsByPrice = (products) => + [...products].sort((a, b) => a.price - b.price) + +const sortedProducts = sortProductsByPrice(inputProducts) + +console.log(sortedProducts) // Массив отсортированных товаров + +console.log(inputProducts) // Оригинальный массив не должен измениться diff --git a/49-sort-array-of-objects/start.js b/49-sort-array-of-objects/start.js new file mode 100644 index 0000000..1ee9a4f --- /dev/null +++ b/49-sort-array-of-objects/start.js @@ -0,0 +1,43 @@ +/** ЗАДАЧА 49 - Сортировка объектов в массиве + * + * 1. Создайте функцию "sortProductsByPrice" с одним параметром "products" + * + * 2. Эта функция должна отсортировать входной массив товаров + * по цене каждого товара в порядке возрастания + * и вернуть отсортированный массив + * + * 3. Оригинальный массив должен остаться без изменений + */ + +const inputProducts = [ + { + title: 'Phone case', + price: 23, + quantity: 2, + category: 'Accessories', + }, + { + title: 'Android phone', + price: 150, + quantity: 1, + category: 'Phones', + }, + { + title: 'Headphones', + price: 78, + quantity: 1, + category: 'Accessories', + }, + { + title: 'Sport Watch', + price: 55, + quantity: 2, + category: 'Watches', + }, +] + +// const sortedProducts = sortProductsByPrice(inputProducts) + +// console.log(sortedProducts) // Массив отсортированных товаров + +// console.log(inputProducts) // Оригинальный массив не должен измениться diff --git a/50-template-literals/finish.js b/50-template-literals/finish.js new file mode 100644 index 0000000..ecb7a23 --- /dev/null +++ b/50-template-literals/finish.js @@ -0,0 +1,26 @@ +/** ЗАДАЧА 50 - Шаблонные строки + * + * 1. Создайте функцию "templateLiteral" с одним параметром "num" + * + * 2. Функция должна возвращать многострочную строку. + * + * 3. Ниже приведены примеры вызовов функции. + */ + +// ТЕСТ 1 +const myNumber = 9 +console.log(templateLiteral(myNumber)) +/* +Число 9. +Это число меньше 10. +Квадратный корень этого числа - 3. +*/ + +// ТЕСТ 2 +const myAnotherNumber = 25 +console.log(templateLiteral(myAnotherNumber)) +/* +Число 25. +Это число больше или равно 10. +Квадратный корень этого числа - 5. +*/ diff --git a/50-template-literals/solution.js b/50-template-literals/solution.js new file mode 100644 index 0000000..906b02a --- /dev/null +++ b/50-template-literals/solution.js @@ -0,0 +1,32 @@ +/** ЗАДАЧА 50 - Шаблонные строки + * + * 1. Создайте функцию "templateLiteral" с одним параметром "num" + * + * 2. Функция должна возвращать многострочную строку. + * + * 3. Ниже приведены примеры вызовов функции. + */ + +const templateLiteral = (num) => { + return `Число ${num}. +Это число ${num < 10 ? 'меньше' : 'больше или равно'} 10. +Квадратный корень этого числа - ${Math.sqrt(num)}.` +} + +// ТЕСТ 1 +const myNumber = 9 +console.log(templateLiteral(myNumber)) +/* +Число 9. +Это число меньше 10. +Квадратный корень этого числа - 3. +*/ + +// ТЕСТ 2 +const myAnotherNumber = 25 +console.log(templateLiteral(myAnotherNumber)) +/* +Число 25. +Это число больше или равно 10. +Квадратный корень этого числа - 5. +*/ diff --git a/50-template-literals/start.js b/50-template-literals/start.js new file mode 100644 index 0000000..ecb7a23 --- /dev/null +++ b/50-template-literals/start.js @@ -0,0 +1,26 @@ +/** ЗАДАЧА 50 - Шаблонные строки + * + * 1. Создайте функцию "templateLiteral" с одним параметром "num" + * + * 2. Функция должна возвращать многострочную строку. + * + * 3. Ниже приведены примеры вызовов функции. + */ + +// ТЕСТ 1 +const myNumber = 9 +console.log(templateLiteral(myNumber)) +/* +Число 9. +Это число меньше 10. +Квадратный корень этого числа - 3. +*/ + +// ТЕСТ 2 +const myAnotherNumber = 25 +console.log(templateLiteral(myAnotherNumber)) +/* +Число 25. +Это число больше или равно 10. +Квадратный корень этого числа - 5. +*/ diff --git a/51-rest-and-spread-operators/finish.js b/51-rest-and-spread-operators/finish.js new file mode 100644 index 0000000..e38cf0d --- /dev/null +++ b/51-rest-and-spread-operators/finish.js @@ -0,0 +1,33 @@ +/** ЗАДАЧА 51 - Операторы "rest" (остаток) и "spread" (распространение) + * + * 1. Создайте функцию "meanScore", + * которая будет принимать любое количество аргументов, + * объединять их в один массив и возвращать среднее значение всех аргументов, + * округленное до 2 знаков после запятой. + * + * 2. Если хотя бы один элемент в этом массиве не является числом - + * выводим в консоль следующую ошибку: + * "Все аргументы в вызове функции должны быть числами!" + * + * ПОДСКАЗКА: В этом задании вы должны использовать как оператор "rest", + * так и оператор "spread". + */ + +const scores1 = [0, 1.5, 2.5, 3.7] +const scores2 = [1.7, 4.5, 0, 4.9, 5.0, 4.2] +const scores3 = [1.3, 2.5, 1.9] +const scores4 = ['abc', 1.3, true, 2.5, 1.9] + +console.log(meanScore(/* все элементы из массива "scores1" */)) +// 1.93 + +console.log(meanScore(/* все элементы из массивов "scores1" и "scores2" */)) +// 2.8 + +console.log( + meanScore(/* все элементы из массивов "scores1", "scores2" и "scores3" */) +) +// 2.59 + +console.log(meanScore(/* все элементы из массива "scores4" */)) +// Все аргументы в вызове функции должны быть числами! diff --git a/51-rest-and-spread-operators/solution.js b/51-rest-and-spread-operators/solution.js new file mode 100644 index 0000000..76ddf02 --- /dev/null +++ b/51-rest-and-spread-operators/solution.js @@ -0,0 +1,48 @@ +/** ЗАДАЧА 51 - Операторы "rest" (остаток) и "spread" (распространение) + * + * 1. Создайте функцию "meanScore", + * которая будет принимать любое количество аргументов, + * объединять их в один массив и возвращать среднее значение всех аргументов, + * округленное до 2 знаков после запятой. + * + * 2. Если хотя бы один элемент в этом массиве не является числом - + * выводим в консоль следующую ошибку: + * "Все аргументы в вызове функции должны быть числами!" + * + * ПОДСКАЗКА: В этом задании вы должны использовать как оператор "rest", + * так и оператор "spread". + */ + +function meanScore(...numbers) { + if (numbers.some((num) => typeof num !== 'number')) { + console.error('Все аргументы в вызове функции должны быть числами!') + return + // throw new Error('Все аргументы в вызове функции должны быть числами!') + } + + /** + * num1 / numbers.length + num2 / numbers.length + ... + num10 / numbers.length + * РАВНОСИЛЬНО + * (num1 + num2 + ... + num10) / numbers.length + */ + return numbers + .reduce((mean, num) => mean + num / numbers.length, 0) + .toFixed(2) +} + +const scores1 = [0, 1.5, 2.5, 3.7] +const scores2 = [1.7, 4.5, 0, 4.9, 5.0, 4.2] +const scores3 = [1.3, 2.5, 1.9] +const scores4 = ['abc', 1.3, true, 2.5, 1.9] + +console.log(meanScore(...scores1)) +// 1.93 + +console.log(meanScore(...scores1, ...scores2)) +// 2.8 + +console.log(meanScore(...scores1, ...scores2, ...scores3)) +// 2.59 + +console.log(meanScore(...scores4)) +// Все аргументы в вызове функции должны быть числами! diff --git a/51-rest-and-spread-operators/start.js b/51-rest-and-spread-operators/start.js new file mode 100644 index 0000000..e38cf0d --- /dev/null +++ b/51-rest-and-spread-operators/start.js @@ -0,0 +1,33 @@ +/** ЗАДАЧА 51 - Операторы "rest" (остаток) и "spread" (распространение) + * + * 1. Создайте функцию "meanScore", + * которая будет принимать любое количество аргументов, + * объединять их в один массив и возвращать среднее значение всех аргументов, + * округленное до 2 знаков после запятой. + * + * 2. Если хотя бы один элемент в этом массиве не является числом - + * выводим в консоль следующую ошибку: + * "Все аргументы в вызове функции должны быть числами!" + * + * ПОДСКАЗКА: В этом задании вы должны использовать как оператор "rest", + * так и оператор "spread". + */ + +const scores1 = [0, 1.5, 2.5, 3.7] +const scores2 = [1.7, 4.5, 0, 4.9, 5.0, 4.2] +const scores3 = [1.3, 2.5, 1.9] +const scores4 = ['abc', 1.3, true, 2.5, 1.9] + +console.log(meanScore(/* все элементы из массива "scores1" */)) +// 1.93 + +console.log(meanScore(/* все элементы из массивов "scores1" и "scores2" */)) +// 2.8 + +console.log( + meanScore(/* все элементы из массивов "scores1", "scores2" и "scores3" */) +) +// 2.59 + +console.log(meanScore(/* все элементы из массива "scores4" */)) +// Все аргументы в вызове функции должны быть числами! diff --git a/52-default-function-parameters/finish.js b/52-default-function-parameters/finish.js new file mode 100644 index 0000000..8fe3e44 --- /dev/null +++ b/52-default-function-parameters/finish.js @@ -0,0 +1,30 @@ +/** ЗАДАЧА 52 - Параметры функции по умолчанию + * + * 1. Создайте функцию "weatherForecast" с двумя параметрами "city" и "weather" + * + * 2. Если второй аргумент отсутствует, + * параметр "weather" должен получить значение "Отличная погода!" + * + * ВАЖНО: + * - Сначала решите это БЕЗ параметра функции по умолчанию + * - Закомментируйте предыдущее решение + * и решите ту же задачу с параметром функции по умолчанию + * + * ПРИМЕЧАНИЕ: + * Внимательно сравните свои результаты с результатами тестовых вызовов + */ + +console.log(weatherForecast('Dubai', 'Солнечно')) +// Прогноз погоды для города Dubai: Солнечно + +console.log(weatherForecast('London', 'Небольшой дождь')) +// Прогноз погоды для города London: Небольшой дождь + +console.log(weatherForecast('Paris')) +// Прогноз погоды для города Paris: Отличная погода! + +console.log(weatherForecast('Miami', '')) +// Прогноз погоды для города Miami: + +console.log(weatherForecast('Las Vegas', undefined)) +// Прогноз погоды для города Las Vegas: Отличная погода! diff --git a/52-default-function-parameters/solution.js b/52-default-function-parameters/solution.js new file mode 100644 index 0000000..0b52d1a --- /dev/null +++ b/52-default-function-parameters/solution.js @@ -0,0 +1,39 @@ +/** ЗАДАЧА 52 - Параметры функции по умолчанию + * + * 1. Создайте функцию "weatherForecast" с двумя параметрами "city" и "weather" + * + * 2. Если второй аргумент отсутствует, + * параметр "weather" должен получить значение "Отличная погода!" + * + * ВАЖНО: + * - Сначала решите это БЕЗ параметра функции по умолчанию + * - Закомментируйте предыдущее решение + * и решите ту же задачу с параметром функции по умолчанию + * + * ПРИМЕЧАНИЕ: + * Внимательно сравните свои результаты с результатами тестовых вызовов + */ + +// function weatherForecast(city, weather) { +// weather = weather !== undefined ? weather : 'Отличная погода!' +// return `Прогноз погоды для города ${city}: ${weather}` +// } + +function weatherForecast(city, weather = 'Отличная погода!') { + return `Прогноз погоды для города ${city}: ${weather}` +} + +console.log(weatherForecast('Dubai', 'Солнечно')) +// Прогноз погоды для города Dubai: Солнечно + +console.log(weatherForecast('London', 'Небольшой дождь')) +// Прогноз погоды для города London: Небольшой дождь + +console.log(weatherForecast('Paris')) +// Прогноз погоды для города Paris: Отличная погода! + +console.log(weatherForecast('Miami', '')) +// Прогноз погоды для города Miami: + +console.log(weatherForecast('Las Vegas', undefined)) +// Прогноз погоды для города Las Vegas: Отличная погода! diff --git a/52-default-function-parameters/start.js b/52-default-function-parameters/start.js new file mode 100644 index 0000000..8fe3e44 --- /dev/null +++ b/52-default-function-parameters/start.js @@ -0,0 +1,30 @@ +/** ЗАДАЧА 52 - Параметры функции по умолчанию + * + * 1. Создайте функцию "weatherForecast" с двумя параметрами "city" и "weather" + * + * 2. Если второй аргумент отсутствует, + * параметр "weather" должен получить значение "Отличная погода!" + * + * ВАЖНО: + * - Сначала решите это БЕЗ параметра функции по умолчанию + * - Закомментируйте предыдущее решение + * и решите ту же задачу с параметром функции по умолчанию + * + * ПРИМЕЧАНИЕ: + * Внимательно сравните свои результаты с результатами тестовых вызовов + */ + +console.log(weatherForecast('Dubai', 'Солнечно')) +// Прогноз погоды для города Dubai: Солнечно + +console.log(weatherForecast('London', 'Небольшой дождь')) +// Прогноз погоды для города London: Небольшой дождь + +console.log(weatherForecast('Paris')) +// Прогноз погоды для города Paris: Отличная погода! + +console.log(weatherForecast('Miami', '')) +// Прогноз погоды для города Miami: + +console.log(weatherForecast('Las Vegas', undefined)) +// Прогноз погоды для города Las Vegas: Отличная погода! diff --git a/53-enhanced-object-literals/finish.js b/53-enhanced-object-literals/finish.js new file mode 100644 index 0000000..5300dba --- /dev/null +++ b/53-enhanced-object-literals/finish.js @@ -0,0 +1,54 @@ +/** ЗАДАЧА 53 - Сокращенное написание свойств объектов + * + * 1. Исправьте все ошибки в коде. + * + * 2. Измените объект, возвращаемый функцией "photosGallery", используя: + * - Сокращенные имена свойств + * - Сокращенные имена методов + * - Также нужно изменить одно свойство объекта + * и сделать его вычисляемым свойством + * + * 3. Сообщения в консоли должны быть точно такими же, + * как и в конце этой задачи + */ + +const photosGallery = (title, dimensions, date) => { + return { + title: title, + info: function() { + console.log( + "Фото "${title}" имеет разрешение ${date}` + ); + }, + dimensions: dimensions + publishInfo: () => { + console.log( + `Фото было опубликовано ${Math.floor( + (new Date().getTime() - date.getTime()) / 1000 + )} секунды назад` + ); + , + date: date + } +} + +const myDogPhoto = photosGallery( + "My dog", + "1920x1080", + new Date() +) + +const testDimension1 = "1920x1080" +const testDimension2 = "1080x720" + +myDogPhoto.info() +/* Фото "My dog" имеет разрешение 1920x1080 */ + +setTimeout(() => myDogPhoto.publishInfo(), 2000) +/* Фото "My dog" было опубликовано 2 секунды назад */ + +/* ВОПРОС: Почему метод "publishInfo" все еще имеет доступ +к параметрам функции "photosGallery" (например "date")? */ + +console.log(myDogPhoto[testDimension1]) // true +console.log(myDogPhoto[testDimension2]) // undefined diff --git a/53-enhanced-object-literals/solution.js b/53-enhanced-object-literals/solution.js new file mode 100644 index 0000000..cd8148c --- /dev/null +++ b/53-enhanced-object-literals/solution.js @@ -0,0 +1,50 @@ +/** ЗАДАЧА 53 - Сокращенное написание свойств объектов + * + * 1. Исправьте все ошибки в коде. + * + * 2. Измените объект, возвращаемый функцией "photosGallery", используя: + * - Сокращенные имена свойств + * - Сокращенные имена методов + * - Также нужно изменить одно свойство объекта + * и сделать его вычисляемым свойством + * + * 3. Сообщения в консоли должны быть точно такими же, + * как и в конце этой задачи + */ + +const photosGallery = (title, dimensions, date) => { + return { + title, + date, + [dimensions]: true, + info() { + console.log(`Фото "${title}" имеет разрешение ${dimensions}`) + }, + publishInfo() { + console.log( + `Фото "${title}" было опубликовано ${Math.floor( + (new Date().getTime() - date.getTime()) / 1000 + )} секунды назад` + ) + }, + } +} + +const myDogPhoto = photosGallery('My dog', '1920x1080', new Date()) + +const testDimension1 = '1920x1080' +const testDimension2 = '1080x720' + +myDogPhoto.info() +/* Фото "My dog" имеет разрешение 1920x1080 */ + +setTimeout(() => myDogPhoto.publishInfo(), 2000) +/* Фото "My dog" было опубликовано 2 секунды назад */ + +/* ВОПРОС: Почему метод "publishInfo" все еще имеет доступ +к параметрам функции "photosGallery" (например "date")? */ + +console.log(myDogPhoto[testDimension1]) // true +console.log(myDogPhoto[testDimension2]) // undefined + +// console.log(Object.keys(myDogPhoto)) diff --git a/53-enhanced-object-literals/start.js b/53-enhanced-object-literals/start.js new file mode 100644 index 0000000..5300dba --- /dev/null +++ b/53-enhanced-object-literals/start.js @@ -0,0 +1,54 @@ +/** ЗАДАЧА 53 - Сокращенное написание свойств объектов + * + * 1. Исправьте все ошибки в коде. + * + * 2. Измените объект, возвращаемый функцией "photosGallery", используя: + * - Сокращенные имена свойств + * - Сокращенные имена методов + * - Также нужно изменить одно свойство объекта + * и сделать его вычисляемым свойством + * + * 3. Сообщения в консоли должны быть точно такими же, + * как и в конце этой задачи + */ + +const photosGallery = (title, dimensions, date) => { + return { + title: title, + info: function() { + console.log( + "Фото "${title}" имеет разрешение ${date}` + ); + }, + dimensions: dimensions + publishInfo: () => { + console.log( + `Фото было опубликовано ${Math.floor( + (new Date().getTime() - date.getTime()) / 1000 + )} секунды назад` + ); + , + date: date + } +} + +const myDogPhoto = photosGallery( + "My dog", + "1920x1080", + new Date() +) + +const testDimension1 = "1920x1080" +const testDimension2 = "1080x720" + +myDogPhoto.info() +/* Фото "My dog" имеет разрешение 1920x1080 */ + +setTimeout(() => myDogPhoto.publishInfo(), 2000) +/* Фото "My dog" было опубликовано 2 секунды назад */ + +/* ВОПРОС: Почему метод "publishInfo" все еще имеет доступ +к параметрам функции "photosGallery" (например "date")? */ + +console.log(myDogPhoto[testDimension1]) // true +console.log(myDogPhoto[testDimension2]) // undefined diff --git a/54-array-destructuring/finish.js b/54-array-destructuring/finish.js new file mode 100644 index 0000000..dbf00d7 --- /dev/null +++ b/54-array-destructuring/finish.js @@ -0,0 +1,20 @@ +/** ЗАДАЧА 54 - Деструктуризация массива + * + * Измените раздел параметров в функции "processQuantities" так, + * чтобы совпали выводы в консоли + * + * Используйте деструктуризацию массива + */ + +const processQuantities = (/* parameters */) => { + console.log(minQty) // 8 + console.log(maxQty) // 29 + console.log(defaultQty) // 10 в первом вызове, 0 во втором вызове + return defaultQty + maxQty - minQty +} + +const inputQuantities1 = [8, 29, 10] +console.log(processQuantities(inputQuantities1)) // 31 + +const inputQuantities2 = [8, 29] +console.log(processQuantities(inputQuantities2)) // 21 diff --git a/54-array-destructuring/solution.js b/54-array-destructuring/solution.js new file mode 100644 index 0000000..c9732d4 --- /dev/null +++ b/54-array-destructuring/solution.js @@ -0,0 +1,20 @@ +/** ЗАДАЧА 54 - Деструктуризация массива + * + * Измените раздел параметров в функции "processQuantities" так, + * чтобы совпали выводы в консоли + * + * Используйте деструктуризацию массива + */ + +const processQuantities = ([minQty, maxQty, defaultQty = 0]) => { + console.log(minQty) // 8 + console.log(maxQty) // 29 + console.log(defaultQty) // 10 в первом вызове, 0 во втором вызове + return defaultQty + maxQty - minQty +} + +const inputQuantities1 = [8, 29, 10] +console.log(processQuantities(inputQuantities1)) // 31 + +const inputQuantities2 = [8, 29] +console.log(processQuantities(inputQuantities2)) // 21 diff --git a/54-array-destructuring/start.js b/54-array-destructuring/start.js new file mode 100644 index 0000000..dbf00d7 --- /dev/null +++ b/54-array-destructuring/start.js @@ -0,0 +1,20 @@ +/** ЗАДАЧА 54 - Деструктуризация массива + * + * Измените раздел параметров в функции "processQuantities" так, + * чтобы совпали выводы в консоли + * + * Используйте деструктуризацию массива + */ + +const processQuantities = (/* parameters */) => { + console.log(minQty) // 8 + console.log(maxQty) // 29 + console.log(defaultQty) // 10 в первом вызове, 0 во втором вызове + return defaultQty + maxQty - minQty +} + +const inputQuantities1 = [8, 29, 10] +console.log(processQuantities(inputQuantities1)) // 31 + +const inputQuantities2 = [8, 29] +console.log(processQuantities(inputQuantities2)) // 21 diff --git a/55-destructure-function-result/finish.js b/55-destructure-function-result/finish.js new file mode 100644 index 0000000..e641760 --- /dev/null +++ b/55-destructure-function-result/finish.js @@ -0,0 +1,16 @@ +/** ЗАДАЧА 55 - Деструктуризация результата функции + * + * 1. Создайте функцию "minMax", которая принимает любое количество аргументов + * + * 2. Эта функция должна возвращать массив из двух элементов: + * - Первый элемент массива - минимальное значение среди всех аргументов. + * - Второй элемент массива - это максимальное значение среди всех аргументов. + */ + +let min, max +/* Вызовите здесь функцию "minMax" с аргументами 24, 5, 34, 10 +и используя деструктуризацию массивов присвойте значения переменным "min" и "max" */ +console.log(min, max) // 5, 34 + +/* Вызовите здесь функцию "minMax" еще раз с аргументами 18, 23, 103, 70, 80, 25 */ +console.log(min, max) // 18, 103 diff --git a/55-destructure-function-result/solution.js b/55-destructure-function-result/solution.js new file mode 100644 index 0000000..39bfe42 --- /dev/null +++ b/55-destructure-function-result/solution.js @@ -0,0 +1,24 @@ +/** ЗАДАЧА 55 - Деструктуризация результата функции + * + * 1. Создайте функцию "minMax", которая принимает любое количество аргументов + * + * 2. Эта функция должна возвращать массив из двух элементов: + * - Первый элемент массива - минимальное значение среди всех аргументов. + * - Второй элемент массива - это максимальное значение среди всех аргументов. + * + * 3. Для поиска минимального и максимального значений используйте Math.min и Math.max + */ + +function minMax(...nums) { + return [Math.min(...nums), Math.max(...nums)] +} + +let min, max +/* Вызовите здесь функцию "minMax" с аргументами 24, 5, 34, 10 +и используя деструктуризацию массивов присвойте значения переменным "min" и "max" */ +;[min, max] = minMax(24, 5, 34, 10) +console.log(min, max) // 5, 34 + +/* Вызовите здесь функцию "minMax" еще раз с аргументами 18, 23, 103, 70, 80, 25 */ +;[min, max] = minMax(18, 23, 103, 70, 80, 25) +console.log(min, max) // 18, 103 diff --git a/55-destructure-function-result/start.js b/55-destructure-function-result/start.js new file mode 100644 index 0000000..e641760 --- /dev/null +++ b/55-destructure-function-result/start.js @@ -0,0 +1,16 @@ +/** ЗАДАЧА 55 - Деструктуризация результата функции + * + * 1. Создайте функцию "minMax", которая принимает любое количество аргументов + * + * 2. Эта функция должна возвращать массив из двух элементов: + * - Первый элемент массива - минимальное значение среди всех аргументов. + * - Второй элемент массива - это максимальное значение среди всех аргументов. + */ + +let min, max +/* Вызовите здесь функцию "minMax" с аргументами 24, 5, 34, 10 +и используя деструктуризацию массивов присвойте значения переменным "min" и "max" */ +console.log(min, max) // 5, 34 + +/* Вызовите здесь функцию "minMax" еще раз с аргументами 18, 23, 103, 70, 80, 25 */ +console.log(min, max) // 18, 103 diff --git a/56-object-destructuring/finish.js b/56-object-destructuring/finish.js new file mode 100644 index 0000000..d794d44 --- /dev/null +++ b/56-object-destructuring/finish.js @@ -0,0 +1,33 @@ +/** ЗАДАЧА 56 - Деструктуризация объектов + * + * 1. Измените функцию "personInfo" так, чтобы получить в консоли такой же вывод + * + * 2. Объект, возвращаемый функцией "personInfo", должен содержать только сокращенные имена свойств + */ + +const personInfo = (/* parameters */) => { + /* return ... */ +} + +const person = { + name: 'Alice', + age: 19, + location: { + country: 'England', + city: 'London', + }, +} + +const result = personInfo(person) + +console.log(result) +/* +{ + name: "Alice", + personAge: 19, + origin: "England", + homeCity: "London", + friendsQty: 0, + createdAtYear: *current year* +} +*/ diff --git a/56-object-destructuring/solution.js b/56-object-destructuring/solution.js new file mode 100644 index 0000000..270025b --- /dev/null +++ b/56-object-destructuring/solution.js @@ -0,0 +1,48 @@ +/** ЗАДАЧА 56 - Деструктуризация объектов + * + * 1. Измените функцию "personInfo" так, чтобы получить в консоли такой же вывод + * + * 2. Объект, возвращаемый функцией "personInfo", должен содержать только сокращенные имена свойств + */ + +const personInfo = (person) => { + const { + name, + age: personAge, + location: { country: origin, city: homeCity }, + friendsQty = 0, + createdAtYear = new Date().getFullYear(), + } = person + + return { + name, + personAge, + origin, + homeCity, + friendsQty, + createdAtYear, + } +} + +const person = { + name: 'Alice', + age: 19, + location: { + country: 'England', + city: 'London', + }, +} + +const result = personInfo(person) + +console.log(result) +/* +{ + name: "Alice", + personAge: 19, + origin: "England", + homeCity: "London", + friendsQty: 0, + createdAtYear: *current year* +} +*/ diff --git a/56-object-destructuring/start.js b/56-object-destructuring/start.js new file mode 100644 index 0000000..d794d44 --- /dev/null +++ b/56-object-destructuring/start.js @@ -0,0 +1,33 @@ +/** ЗАДАЧА 56 - Деструктуризация объектов + * + * 1. Измените функцию "personInfo" так, чтобы получить в консоли такой же вывод + * + * 2. Объект, возвращаемый функцией "personInfo", должен содержать только сокращенные имена свойств + */ + +const personInfo = (/* parameters */) => { + /* return ... */ +} + +const person = { + name: 'Alice', + age: 19, + location: { + country: 'England', + city: 'London', + }, +} + +const result = personInfo(person) + +console.log(result) +/* +{ + name: "Alice", + personAge: 19, + origin: "England", + homeCity: "London", + friendsQty: 0, + createdAtYear: *current year* +} +*/ diff --git a/57-array-transformation/finish.js b/57-array-transformation/finish.js new file mode 100644 index 0000000..9802a25 --- /dev/null +++ b/57-array-transformation/finish.js @@ -0,0 +1,52 @@ +/** ЗАДАЧА 57 - Трансформация массива объектов + * + * 1. Создайте функцию "processPosts", которая будет возвращать новый массив сообщений + * + * 2. Обратите внимание, что + * - некоторые имена свойств в каждом сообщении изменены + * - ID каждого сообщения увеличен на 1000 + * + * 3. Исходный массив постов должен остаться без изменений + */ + +const testPosts = [ + { + postId: 234, + author: 'robd', + commentsQty: 5, + }, + { + postId: 823, + author: 'sady', + }, + { + postId: 161, + author: 'merryl', + commentsQty: 8, + }, +] + +const processedPosts = processPosts(testPosts) +console.log(processedPosts) +/* +[ + { + postId: 1234, + postAuthor: 'robd', + postCommentsQty: 5 + }, + { + postId: 1823, + postAuthor: 'sady', + postCommentsQty: 0 + }, + { + postId: 1161, + postAuthor: 'merryl', + postCommentsQty: 8 + } +] +*/ + +console.log(testPosts) +// оригинальный массив должен остаться без изменений diff --git a/57-array-transformation/solution.js b/57-array-transformation/solution.js new file mode 100644 index 0000000..25ec57c --- /dev/null +++ b/57-array-transformation/solution.js @@ -0,0 +1,68 @@ +/** ЗАДАЧА 57 - Трансформация массива объектов + * + * 1. Создайте функцию "processPosts", которая будет возвращать новый массив сообщений + * + * 2. Обратите внимание, что + * - некоторые имена свойств в каждом сообщении изменены + * - ID каждого сообщения увеличен на 1000 + * + * 3. Исходный массив постов должен остаться без изменений + */ + +const processPosts = (posts) => { + return posts.map((post) => { + const { + postId, + author: postAuthor, + commentsQty: postCommentsQty = 0, + } = post + + return { + postAuthor, + postCommentsQty, + postId: postId + 1000, + } + }) +} + +const testPosts = [ + { + postId: 234, + author: 'robd', + commentsQty: 5, + }, + { + postId: 823, + author: 'sady', + }, + { + postId: 161, + author: 'merryl', + commentsQty: 8, + }, +] + +const processedPosts = processPosts(testPosts) +console.log(processedPosts) +/* +[ + { + postId: 1234, + postAuthor: 'robd', + postCommentsQty: 5 + }, + { + postId: 1823, + postAuthor: 'sady', + postCommentsQty: 0 + }, + { + postId: 1161, + postAuthor: 'merryl', + postCommentsQty: 8 + } +] +*/ + +console.log(testPosts) +// оригинальный массив должен остаться без изменений diff --git a/57-array-transformation/start.js b/57-array-transformation/start.js new file mode 100644 index 0000000..9802a25 --- /dev/null +++ b/57-array-transformation/start.js @@ -0,0 +1,52 @@ +/** ЗАДАЧА 57 - Трансформация массива объектов + * + * 1. Создайте функцию "processPosts", которая будет возвращать новый массив сообщений + * + * 2. Обратите внимание, что + * - некоторые имена свойств в каждом сообщении изменены + * - ID каждого сообщения увеличен на 1000 + * + * 3. Исходный массив постов должен остаться без изменений + */ + +const testPosts = [ + { + postId: 234, + author: 'robd', + commentsQty: 5, + }, + { + postId: 823, + author: 'sady', + }, + { + postId: 161, + author: 'merryl', + commentsQty: 8, + }, +] + +const processedPosts = processPosts(testPosts) +console.log(processedPosts) +/* +[ + { + postId: 1234, + postAuthor: 'robd', + postCommentsQty: 5 + }, + { + postId: 1823, + postAuthor: 'sady', + postCommentsQty: 0 + }, + { + postId: 1161, + postAuthor: 'merryl', + postCommentsQty: 8 + } +] +*/ + +console.log(testPosts) +// оригинальный массив должен остаться без изменений diff --git a/58-delete-object-properties/finish.js b/58-delete-object-properties/finish.js new file mode 100644 index 0000000..c4d4e56 --- /dev/null +++ b/58-delete-object-properties/finish.js @@ -0,0 +1,28 @@ +/** ЗАДАЧА 58 - Удаление свойств объекта + * + * 1. Используйте деструктуризацию объекта вместе с rest опертором, + * чтобы быстро удалить определенные свойства из объекта. + * + * 2. Убедитесь, что переменные, которые будут использоваться для деструктуризации удаленных свойств, + * не будут доступны после операции деструктуризации. + */ + +let person = { + _id: '5ad8cefcc0971792dacb3f1f', + index: 4, + processed: false, + cart: ['item1', 'item2', 'item3'], + email: 'slarsen@test.com', + name: 'Samanta Larsen', + cartId: 435, +} + +console.log(person) +/* +{ + index: 4, + email: "slarsen@test.com", + name: "Samanta Larsen", + cartId: 435 +} +*/ diff --git a/58-delete-object-properties/solution.js b/58-delete-object-properties/solution.js new file mode 100644 index 0000000..986196d --- /dev/null +++ b/58-delete-object-properties/solution.js @@ -0,0 +1,42 @@ +/** ЗАДАЧА 58 - Удаление свойств объекта + * + * 1. Используйте деструктуризацию объекта вместе с rest опертором, + * чтобы быстро удалить определенные свойства из объекта. + * + * 2. Убедитесь, что переменные, которые будут использоваться для деструктуризации удаленных свойств, + * не будут доступны после операции деструктуризации. + */ + +let person = { + _id: '5ad8cefcc0971792dacb3f1f', + index: 4, + processed: false, + cart: ['item1', 'item2', 'item3'], + email: 'slarsen@test.com', + name: 'Samanta Larsen', + cartId: 435, +} + +{ + let _id, processed, cart + ;({ _id, processed, cart, ...person } = person) + console.log(_id, processed, cart) +} + +// // OPTION: Delete operator +// delete person._id +// delete person.processed +// delete person.cart + +// // ReferenceError: _id is not defined (Because _id, processed and cart are block-scoped variables) +// console.log(_id, processed, cart) + +console.log(person) +/* +{ + index: 4, + email: "slarsen@test.com", + name: "Samanta Larsen", + cartId: 435 +} +*/ diff --git a/58-delete-object-properties/start.js b/58-delete-object-properties/start.js new file mode 100644 index 0000000..c4d4e56 --- /dev/null +++ b/58-delete-object-properties/start.js @@ -0,0 +1,28 @@ +/** ЗАДАЧА 58 - Удаление свойств объекта + * + * 1. Используйте деструктуризацию объекта вместе с rest опертором, + * чтобы быстро удалить определенные свойства из объекта. + * + * 2. Убедитесь, что переменные, которые будут использоваться для деструктуризации удаленных свойств, + * не будут доступны после операции деструктуризации. + */ + +let person = { + _id: '5ad8cefcc0971792dacb3f1f', + index: 4, + processed: false, + cart: ['item1', 'item2', 'item3'], + email: 'slarsen@test.com', + name: 'Samanta Larsen', + cartId: 435, +} + +console.log(person) +/* +{ + index: 4, + email: "slarsen@test.com", + name: "Samanta Larsen", + cartId: 435 +} +*/ diff --git a/59-extend-array/finish.js b/59-extend-array/finish.js new file mode 100644 index 0000000..66702ba --- /dev/null +++ b/59-extend-array/finish.js @@ -0,0 +1,15 @@ +/** ЗАДАЧА 59 - Расширение массивов + * + * 1. Создайте новый класс "ExtendedArray", который должен расширять встроенный "Array" + * + * 2. Добавьте в новый класс два пользовательских метода: + * - "sum" - он должен возвращать сумму всех элементов массива + * - "onlyNumbers" - должен возвращать новый массив, + * который будет содержать только числа из исходного массива + * + * 3. Создайте несколько экземпляров нового класса "ExtendedArray" + * и протестируйте оба метода "sum" и "onlyNumbers". + * + * 4. Убедитесь, что остальные методы массивов такие, + * как "forEach", "map" также доступны + */ diff --git a/59-extend-array/solution.js b/59-extend-array/solution.js new file mode 100644 index 0000000..e1b2c27 --- /dev/null +++ b/59-extend-array/solution.js @@ -0,0 +1,39 @@ +/** ЗАДАЧА 59 - Расширение массивов + * + * 1. Создайте новый класс "ExtendedArray", который должен расширять встроенный "Array" + * + * 2. Добавьте в новый класс два пользовательских метода: + * - "sum" - он должен возвращать сумму всех элементов массива + * - "onlyNumbers" - должен возвращать новый массив, + * который будет содержать только числа из исходного массива + * + * 3. Создайте несколько экземпляров нового класса "ExtendedArray" + * и протестируйте оба метода "sum" и "onlyNumbers". + * + * 4. Убедитесь, что остальные методы массивов такие, + * как "forEach", "map" также доступны + */ + +class ExtendedArray extends Array { + sum() { + return this.reduce((sum, num) => sum + num, 0) + } + + onlyNumbers() { + return this.filter((el) => typeof el === 'number') + } +} + +const myExtendedArray = new ExtendedArray(10, 4, 5) +console.log(myExtendedArray) + +console.log(myExtendedArray.sum()) + +const myExtendedArray2 = new ExtendedArray('abc', 5, true, 25) +console.log(myExtendedArray2.onlyNumbers()) + +myExtendedArray2.forEach((el) => console.log(el)) + +// // Array instances don't have access to methods sum and onlyNumbers +// const myArray = [1, 2, 3] +// myArray.sum() diff --git a/59-extend-array/start.js b/59-extend-array/start.js new file mode 100644 index 0000000..66702ba --- /dev/null +++ b/59-extend-array/start.js @@ -0,0 +1,15 @@ +/** ЗАДАЧА 59 - Расширение массивов + * + * 1. Создайте новый класс "ExtendedArray", который должен расширять встроенный "Array" + * + * 2. Добавьте в новый класс два пользовательских метода: + * - "sum" - он должен возвращать сумму всех элементов массива + * - "onlyNumbers" - должен возвращать новый массив, + * который будет содержать только числа из исходного массива + * + * 3. Создайте несколько экземпляров нового класса "ExtendedArray" + * и протестируйте оба метода "sum" и "onlyNumbers". + * + * 4. Убедитесь, что остальные методы массивов такие, + * как "forEach", "map" также доступны + */ diff --git a/60-custom-push-method-for-arrays/finish.js b/60-custom-push-method-for-arrays/finish.js new file mode 100644 index 0000000..0c50fcb --- /dev/null +++ b/60-custom-push-method-for-arrays/finish.js @@ -0,0 +1,21 @@ +/** ЗАДАЧА 60 - Модифицированный метод push для массивов + * + * 1. Создайте новый класс "CustomArray", который должен расширять встроенный "Array" + * + * 2. Добавьте один пользовательский метод "customPush" в новый класс. + * Этот метод будет иметь один параметр "newElement". + * + * При вызове этого метода необходимо выполнить следующие действия: + * - Добавить новый элемент в существующий массив + * (не используйте для этого метод "push") + * - Изменить свойство "length" массива (увеличить его на 1) + * - Вывести в консоль следующую строку: + * "Новый элемент был только что добавлен в массив" + * + * 3. Создайте экземпляр нового класса "CustomArray" + * и протестируйте новый метод "customPush" и сравните его с "push" + * + * 4. Что произойдет, если имя пользовательского метода + * в классе "CustomArray" также будет "push" вместо "customPush"? + * Попробуйте это. + */ diff --git a/60-custom-push-method-for-arrays/solution.js b/60-custom-push-method-for-arrays/solution.js new file mode 100644 index 0000000..5b0f894 --- /dev/null +++ b/60-custom-push-method-for-arrays/solution.js @@ -0,0 +1,39 @@ +/** ЗАДАЧА 60 - Модифицированный метод push для массивов + * + * 1. Создайте новый класс "CustomArray", который должен расширять встроенный "Array" + * + * 2. Добавьте один пользовательский метод "customPush" в новый класс. + * Этот метод будет иметь один параметр "newElement". + * + * При вызове этого метода необходимо выполнить следующие действия: + * - Добавить новый элемент в существующий массив + * (не используйте для этого метод "push") + * - Изменить свойство "length" массива (увеличить его на 1) + * - Вывести в консоль следующую строку: + * "Новый элемент был только что добавлен в массив" + * + * 3. Создайте экземпляр нового класса "CustomArray" + * и протестируйте новый метод "customPush" и сравните его с "push" + * + * 4. Что произойдет, если имя пользовательского метода + * в классе "CustomArray" также будет "push" вместо "customPush"? + * Попробуйте это. + */ + +class CustomArray extends Array { + customPush(newElement) { + console.log(this.length) + this[this.length] = newElement + console.log(this.length) + console.log(`Новый элемент ${newElement} был только что добавлен в массив`) + } +} + +const myCustomArray = new CustomArray(10, 3, 7, 5) +myCustomArray.customPush(25) + +console.log(myCustomArray) + +myCustomArray.push(30) + +console.log(myCustomArray) diff --git a/60-custom-push-method-for-arrays/start.js b/60-custom-push-method-for-arrays/start.js new file mode 100644 index 0000000..0c50fcb --- /dev/null +++ b/60-custom-push-method-for-arrays/start.js @@ -0,0 +1,21 @@ +/** ЗАДАЧА 60 - Модифицированный метод push для массивов + * + * 1. Создайте новый класс "CustomArray", который должен расширять встроенный "Array" + * + * 2. Добавьте один пользовательский метод "customPush" в новый класс. + * Этот метод будет иметь один параметр "newElement". + * + * При вызове этого метода необходимо выполнить следующие действия: + * - Добавить новый элемент в существующий массив + * (не используйте для этого метод "push") + * - Изменить свойство "length" массива (увеличить его на 1) + * - Вывести в консоль следующую строку: + * "Новый элемент был только что добавлен в массив" + * + * 3. Создайте экземпляр нового класса "CustomArray" + * и протестируйте новый метод "customPush" и сравните его с "push" + * + * 4. Что произойдет, если имя пользовательского метода + * в классе "CustomArray" также будет "push" вместо "customPush"? + * Попробуйте это. + */ diff --git a/61-sum-numbers/finish.js b/61-sum-numbers/finish.js new file mode 100644 index 0000000..2ce35cf --- /dev/null +++ b/61-sum-numbers/finish.js @@ -0,0 +1,18 @@ +/** ЗАДАЧА 61 - Сумма чисел + * + * 1. Создайте функцию "sumNumbers", которая будет суммировать все переданные ей аргументы. + * Количество аргументов неизвестно + * + * 2. Используйте console.log внутри функции для вывода результата + * + * 3. Также верните эту сумму как результат функции + */ + +sumNumbers(1, 3) +// 4 + +sumNumbers(10, 20, 5) +// 35 + +sumNumbers(2, 5, 80, 1, 10, 12) +// 110 diff --git a/61-sum-numbers/solution.js b/61-sum-numbers/solution.js new file mode 100644 index 0000000..1531c3f --- /dev/null +++ b/61-sum-numbers/solution.js @@ -0,0 +1,28 @@ +/** ЗАДАЧА 61 - Сумма чисел + * + * 1. Создайте функцию "sumNumbers", которая будет суммировать все переданные ей аргументы. + * Количество аргументов неизвестно + * + * 2. Используйте console.log внутри функции для вывода результата + * + * 3. Также верните эту сумму как результат функции + */ + +function sumNumbers() { + let sum = 0 + for (let i = 0; i < arguments.length; i++) { + sum += arguments[i] + } + console.log('Sum of all arguments is ', sum) + + return sum +} + +sumNumbers(1, 3) +// 4 + +sumNumbers(10, 20, 5) +// 35 + +sumNumbers(2, 5, 80, 1, 10, 12) +// 110 diff --git a/61-sum-numbers/start.js b/61-sum-numbers/start.js new file mode 100644 index 0000000..2ce35cf --- /dev/null +++ b/61-sum-numbers/start.js @@ -0,0 +1,18 @@ +/** ЗАДАЧА 61 - Сумма чисел + * + * 1. Создайте функцию "sumNumbers", которая будет суммировать все переданные ей аргументы. + * Количество аргументов неизвестно + * + * 2. Используйте console.log внутри функции для вывода результата + * + * 3. Также верните эту сумму как результат функции + */ + +sumNumbers(1, 3) +// 4 + +sumNumbers(10, 20, 5) +// 35 + +sumNumbers(2, 5, 80, 1, 10, 12) +// 110 diff --git a/62-different-functions/.DS_Store b/62-different-functions/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/62-different-functions/.DS_Store differ diff --git a/62-different-functions/finish.js b/62-different-functions/finish.js new file mode 100644 index 0000000..394542e --- /dev/null +++ b/62-different-functions/finish.js @@ -0,0 +1,16 @@ +/** ЗАДАЧА 62 - Разница в объявлении функций + * + * 1. Объясните разницу между двумя вариантами объявления функций + * + * 2. Покажите эту разницу, добавив дополнительный код под функциями + * + * 3. Также вызовите обе функции + */ + +function firstFunction(a, b) { + return a + b +} + +const secondFunction = function (a, b) { + return a + b +} diff --git a/62-different-functions/solution.js b/62-different-functions/solution.js new file mode 100644 index 0000000..d21588e --- /dev/null +++ b/62-different-functions/solution.js @@ -0,0 +1,32 @@ +/** ЗАДАЧА 62 - Разница в объявлении функций + * + * 1. Объясните разницу между двумя вариантами объявления функций + * + * 2. Покажите эту разницу, добавив дополнительный код под функциями + * + * 3. Также вызовите обе функции + */ + +// // Function can be called before declaration +// console.log(firstFunction(2, 3)) + +function firstFunction(a, b) { + return a + b +} + +// // We can assign new value +// firstFunction = '123' +// console.log(firstFunction) + +// // Cannot access 'secondFunction' before initialization +// secondFunction(2, 7) + +const secondFunction = function (a, b) { + return a + b +} + +// // New value can't be assigned +// secondFunction = true + +console.log(firstFunction(2, 5)) +console.log(secondFunction(5, 10)) diff --git a/62-different-functions/start.js b/62-different-functions/start.js new file mode 100644 index 0000000..394542e --- /dev/null +++ b/62-different-functions/start.js @@ -0,0 +1,16 @@ +/** ЗАДАЧА 62 - Разница в объявлении функций + * + * 1. Объясните разницу между двумя вариантами объявления функций + * + * 2. Покажите эту разницу, добавив дополнительный код под функциями + * + * 3. Также вызовите обе функции + */ + +function firstFunction(a, b) { + return a + b +} + +const secondFunction = function (a, b) { + return a + b +} diff --git a/63-function-scope/finish.js b/63-function-scope/finish.js new file mode 100644 index 0000000..6e53ab7 --- /dev/null +++ b/63-function-scope/finish.js @@ -0,0 +1,21 @@ +/** ЗАДАЧА 63 - Зона видимости функции + * + * Что будет выведено в консоль? + * Ответьте на вопрос без запуска кода + */ + +const b = 2 +let d = 15 + +function myFn1(a) { + let b + let d = 10 + myFn2(b) +} + +function myFn2(a) { + let c = 5 + console.log(a, b, c, d) +} + +myFn1() diff --git a/63-function-scope/solution.js b/63-function-scope/solution.js new file mode 100644 index 0000000..4857cfa --- /dev/null +++ b/63-function-scope/solution.js @@ -0,0 +1,22 @@ +/** ЗАДАЧА 63 - Зона видимости функции + * + * Что будет выведено в консоль? + * Ответьте на вопрос без запуска кода + */ + +const b = 2 +let d = 15 + +function myFn1(a) { + let b + let d = 10 + myFn2(b) +} + +function myFn2(a) { + let c = 5 + console.log(a, b, c, d) + // a - undefined, b - 2, c - 5, d - 15 +} + +myFn1() diff --git a/63-function-scope/start.js b/63-function-scope/start.js new file mode 100644 index 0000000..6e53ab7 --- /dev/null +++ b/63-function-scope/start.js @@ -0,0 +1,21 @@ +/** ЗАДАЧА 63 - Зона видимости функции + * + * Что будет выведено в консоль? + * Ответьте на вопрос без запуска кода + */ + +const b = 2 +let d = 15 + +function myFn1(a) { + let b + let d = 10 + myFn2(b) +} + +function myFn2(a) { + let c = 5 + console.log(a, b, c, d) +} + +myFn1() diff --git a/64-hoisting/finish.js b/64-hoisting/finish.js new file mode 100644 index 0000000..b18fa52 --- /dev/null +++ b/64-hoisting/finish.js @@ -0,0 +1,22 @@ +/** ЗАДАЧА 64 - Hoisting + * + * Измените код, чтобы исправить ошибку после строки 13. + * + * Ошибка после строки 21 все равно должна генерироваться. + * Почему ошибка после строки 21 возникает? + */ + +const a = 5 +const b = 10 + +if (b > a) { + c = a + b + c + // ДО: ReferenceError: Cannot access 'c' before initialization + // ПОСЛЕ: Нет ошибки + let c = 2 + console.log(c) + // 17 +} + +console.log(c) +// Uncaught ReferenceError: c is not defined diff --git a/64-hoisting/solution.js b/64-hoisting/solution.js new file mode 100644 index 0000000..d6dcb05 --- /dev/null +++ b/64-hoisting/solution.js @@ -0,0 +1,22 @@ +/** ЗАДАЧА 64 - Hoisting + * + * Измените код, чтобы исправить ошибку после строки 13. + * + * Ошибка после строки 21 все равно должна генерироваться. + * Почему ошибка после строки 21 возникает? + */ + +const a = 5 +const b = 10 + +if (b > a) { + let c = 2 + c = a + b + c + // ДО: ReferenceError: Cannot access 'c' before initialization + // ПОСЛЕ: Нет ошибки + console.log(c) + // 17 +} + +console.log(c) +// Uncaught ReferenceError: c is not defined diff --git a/64-hoisting/start.js b/64-hoisting/start.js new file mode 100644 index 0000000..b18fa52 --- /dev/null +++ b/64-hoisting/start.js @@ -0,0 +1,22 @@ +/** ЗАДАЧА 64 - Hoisting + * + * Измените код, чтобы исправить ошибку после строки 13. + * + * Ошибка после строки 21 все равно должна генерироваться. + * Почему ошибка после строки 21 возникает? + */ + +const a = 5 +const b = 10 + +if (b > a) { + c = a + b + c + // ДО: ReferenceError: Cannot access 'c' before initialization + // ПОСЛЕ: Нет ошибки + let c = 2 + console.log(c) + // 17 +} + +console.log(c) +// Uncaught ReferenceError: c is not defined diff --git a/65-ternary-operator/finish.js b/65-ternary-operator/finish.js new file mode 100644 index 0000000..81ad29e --- /dev/null +++ b/65-ternary-operator/finish.js @@ -0,0 +1,21 @@ +/** ЗАДАЧА 65 - Тернарный оператор + * + * Измените функцию "isNumber", используя тернарный оператор + */ + +function isNumber(a) { + if (typeof a === 'number') { + return `${a} - это число` + } else { + return `${a} - это не число` + } +} + +console.log(isNumber(10)) +// 10 - это число + +console.log(isNumber('Привет')) +// Привет - это не число + +console.log(isNumber(true)) +// true - это не число diff --git a/65-ternary-operator/solution.js b/65-ternary-operator/solution.js new file mode 100644 index 0000000..ed93066 --- /dev/null +++ b/65-ternary-operator/solution.js @@ -0,0 +1,17 @@ +/** ЗАДАЧА 65 - Тернарный оператор + * + * Измените функцию "isNumber", используя тернарный оператор + */ + +function isNumber(a) { + return typeof a === 'number' ? `${a} - это число` : `${a} - это не число` +} + +console.log(isNumber(10)) +// 10 - это число + +console.log(isNumber('Привет')) +// Привет - это не число + +console.log(isNumber(true)) +// true - это не число diff --git a/65-ternary-operator/start.js b/65-ternary-operator/start.js new file mode 100644 index 0000000..81ad29e --- /dev/null +++ b/65-ternary-operator/start.js @@ -0,0 +1,21 @@ +/** ЗАДАЧА 65 - Тернарный оператор + * + * Измените функцию "isNumber", используя тернарный оператор + */ + +function isNumber(a) { + if (typeof a === 'number') { + return `${a} - это число` + } else { + return `${a} - это не число` + } +} + +console.log(isNumber(10)) +// 10 - это число + +console.log(isNumber('Привет')) +// Привет - это не число + +console.log(isNumber(true)) +// true - это не число diff --git a/66-arrow-functions/finish.js b/66-arrow-functions/finish.js new file mode 100644 index 0000000..2f76be0 --- /dev/null +++ b/66-arrow-functions/finish.js @@ -0,0 +1,13 @@ +/** ЗАДАЧА 66 - Стрелочные функции + * + * Замените обычные функции на стрелочные + */ + +function mult(a, b) { + return a * b +} + +setTimeout(function () { + console.log(mult(5, 10)) +}, 1000) +// 50 diff --git a/66-arrow-functions/solution.js b/66-arrow-functions/solution.js new file mode 100644 index 0000000..3313a3b --- /dev/null +++ b/66-arrow-functions/solution.js @@ -0,0 +1,11 @@ +/** ЗАДАЧА 66 - Стрелочные функции + * + * Замените обычные функции на стрелочные + */ + +const mult = (a, b) => a * b + +setTimeout(() => { + console.log(mult(5, 10)) +}, 1000) +// 50 diff --git a/66-arrow-functions/start.js b/66-arrow-functions/start.js new file mode 100644 index 0000000..2f76be0 --- /dev/null +++ b/66-arrow-functions/start.js @@ -0,0 +1,13 @@ +/** ЗАДАЧА 66 - Стрелочные функции + * + * Замените обычные функции на стрелочные + */ + +function mult(a, b) { + return a * b +} + +setTimeout(function () { + console.log(mult(5, 10)) +}, 1000) +// 50 diff --git a/67-default-parameters/finish.js b/67-default-parameters/finish.js new file mode 100644 index 0000000..e52fc81 --- /dev/null +++ b/67-default-parameters/finish.js @@ -0,0 +1,26 @@ +/** ЗАДАЧА 67 - Параметры функции по умолчанию + * + * 1. Ответьте на следующий вопрос: + * - Почему в строке 12 мы не можем просто использовать оператор ИЛИ? + * mult = mult || 2 + * + * 2. Перепишите функцию с использованием значения по умолчанию + * для параметра mult в "multiplyBy" + */ + +function multiplyBy(a, mult) { + mult = mult !== undefined ? mult : 2 + console.log(a * mult) +} + +multiplyBy(2) +// 4 + +multiplyBy(2, undefined) +// 4 + +multiplyBy(2, 0) +// 0 + +multiplyBy(5, 10) +// 50 diff --git a/67-default-parameters/solution.js b/67-default-parameters/solution.js new file mode 100644 index 0000000..5dd75e7 --- /dev/null +++ b/67-default-parameters/solution.js @@ -0,0 +1,25 @@ +/** ЗАДАЧА 67 - Параметры функции по умолчанию + * + * 1. Ответьте на следующий вопрос: + * - Почему в строке 12 мы не можем просто использовать оператор ИЛИ? + * mult = mult || 2 + * + * 2. Перепишите функцию с использованием значения по умолчанию + * для параметра mult в "multiplyBy" + */ + +function multiplyBy(a, mult = 2) { + console.log(a * mult) +} + +multiplyBy(2) +// 4 + +multiplyBy(2, undefined) +// 4 + +multiplyBy(2, 0) +// 0 + +multiplyBy(5, 10) +// 50 diff --git a/67-default-parameters/start.js b/67-default-parameters/start.js new file mode 100644 index 0000000..e52fc81 --- /dev/null +++ b/67-default-parameters/start.js @@ -0,0 +1,26 @@ +/** ЗАДАЧА 67 - Параметры функции по умолчанию + * + * 1. Ответьте на следующий вопрос: + * - Почему в строке 12 мы не можем просто использовать оператор ИЛИ? + * mult = mult || 2 + * + * 2. Перепишите функцию с использованием значения по умолчанию + * для параметра mult в "multiplyBy" + */ + +function multiplyBy(a, mult) { + mult = mult !== undefined ? mult : 2 + console.log(a * mult) +} + +multiplyBy(2) +// 4 + +multiplyBy(2, undefined) +// 4 + +multiplyBy(2, 0) +// 0 + +multiplyBy(5, 10) +// 50 diff --git a/68-presence-of-the-function-parameters/finish.js b/68-presence-of-the-function-parameters/finish.js new file mode 100644 index 0000000..f296ce5 --- /dev/null +++ b/68-presence-of-the-function-parameters/finish.js @@ -0,0 +1,17 @@ +/** ЗАДАЧА 68 - Проверка наличия аргументов в вызове функции + * + * Измените функцию "square" так, чтобы в случае ее вызова + * без аргумента генерировалась ошибка + * "Функция "square" не может быть вызвана без аргумента" + */ + +function square(a) { + console.log(a * a) +} + +square(10) +// 100 + +square() +// ДО: NaN +// ПОСЛЕ: Uncaught Error: Функция "square" не может быть вызвана без аргумента diff --git a/68-presence-of-the-function-parameters/solution.js b/68-presence-of-the-function-parameters/solution.js new file mode 100644 index 0000000..cafcd76 --- /dev/null +++ b/68-presence-of-the-function-parameters/solution.js @@ -0,0 +1,27 @@ +/** ЗАДАЧА 68 - Проверка наличия аргументов в вызове функции + * + * Измените функцию "square" так, чтобы в случае ее вызова + * без аргумента генерировалась ошибка + * "Функция "square" не может быть вызвана без аргумента" + */ + +function square(a) { + // // OPTION 1 + // if (a === undefined) { + // throw new Error('Функция "square" не может быть вызвана без аргумента') + // } + + // OPTION 2 + if (arguments.length === 0) { + throw new Error('Функция "square" не может быть вызвана без аргумента') + } + + console.log(a * a) +} + +square(10) +// 100 + +square() +// ДО: NaN +// ПОСЛЕ: Uncaught Error: Функция "square" не может быть вызвана без аргумента diff --git a/68-presence-of-the-function-parameters/start.js b/68-presence-of-the-function-parameters/start.js new file mode 100644 index 0000000..f296ce5 --- /dev/null +++ b/68-presence-of-the-function-parameters/start.js @@ -0,0 +1,17 @@ +/** ЗАДАЧА 68 - Проверка наличия аргументов в вызове функции + * + * Измените функцию "square" так, чтобы в случае ее вызова + * без аргумента генерировалась ошибка + * "Функция "square" не может быть вызвана без аргумента" + */ + +function square(a) { + console.log(a * a) +} + +square(10) +// 100 + +square() +// ДО: NaN +// ПОСЛЕ: Uncaught Error: Функция "square" не может быть вызвана без аргумента diff --git a/69-object-destructuring/finish.js b/69-object-destructuring/finish.js new file mode 100644 index 0000000..509c3dd --- /dev/null +++ b/69-object-destructuring/finish.js @@ -0,0 +1,19 @@ +/** ЗАДАЧА 69 - Деструктуризация объектов + * + * Создайте функцию "mult", в которой будут умножаться + * значения свойств x, y, z переданного объекта + * + * Результат умножения верните из функции + */ + +const objectWithNumbers = { + x: 5, + y: 20, + z: 3, +} + +// Создайте функцию здесь + +const result = mult(objectWithNumbers) +console.log(result) +// 300 diff --git a/69-object-destructuring/solution.js b/69-object-destructuring/solution.js new file mode 100644 index 0000000..1f1e7a5 --- /dev/null +++ b/69-object-destructuring/solution.js @@ -0,0 +1,32 @@ +/** ЗАДАЧА 69 - Деструктуризация объектов + * + * Создайте функцию "mult", в которой будут умножаться + * значения свойств x, y, z переданного объекта + * + * Результат умножения верните из функции + */ + +const objectWithNumbers = { + x: 5, + y: 20, + z: 3, +} + +// // OPTION 1 +// const mult = (nums) => { +// const { x, y, z } = nums + +// return x * y * z +// } + +// // OPTION 2 +// const mult = ({ x, y, z }) => { +// return x * y * z +// } + +// OPTION 3 +const mult = ({ x, y, z }) => x * y * z + +const result = mult(objectWithNumbers) +console.log(result) +// 300 diff --git a/69-object-destructuring/start.js b/69-object-destructuring/start.js new file mode 100644 index 0000000..509c3dd --- /dev/null +++ b/69-object-destructuring/start.js @@ -0,0 +1,19 @@ +/** ЗАДАЧА 69 - Деструктуризация объектов + * + * Создайте функцию "mult", в которой будут умножаться + * значения свойств x, y, z переданного объекта + * + * Результат умножения верните из функции + */ + +const objectWithNumbers = { + x: 5, + y: 20, + z: 3, +} + +// Создайте функцию здесь + +const result = mult(objectWithNumbers) +console.log(result) +// 300 diff --git a/70-destructuring-and-rest-operator/finish.js b/70-destructuring-and-rest-operator/finish.js new file mode 100644 index 0000000..b338931 --- /dev/null +++ b/70-destructuring-and-rest-operator/finish.js @@ -0,0 +1,20 @@ +/** ЗАДАЧА 70 - Деструктуризация массивов и "rest" оператор + * + * Присвойте переменным "a", "b" и "с" значения, используя + * деструктуризацию массивов и "rest" оператор + * + * Значения переменных должны быть такими как в выводах в консоли + */ + +const arr = [1, 2, 3, 4, 5, 6, 7] + +// Напишите код здесь + +console.log(a) +// 1 + +console.log(b) +// 2 + +console.log(c) +// [3, 4, 5, 6, 7] diff --git a/70-destructuring-and-rest-operator/solution.js b/70-destructuring-and-rest-operator/solution.js new file mode 100644 index 0000000..d05afc2 --- /dev/null +++ b/70-destructuring-and-rest-operator/solution.js @@ -0,0 +1,20 @@ +/** ЗАДАЧА 70 - Деструктуризация массивов и "rest" оператор + * + * Присвойте переменным "a", "b" и "с" значения, используя + * деструктуризацию массивов и "rest" оператор + * + * Значения переменных должны быть такими как в выводах в консоли + */ + +const arr = [1, 2, 3, 4, 5, 6, 7] + +const [a, b, ...c] = arr + +console.log(a) +// 1 + +console.log(b) +// 2 + +console.log(c) +// [3, 4, 5, 6, 7] diff --git a/70-destructuring-and-rest-operator/start.js b/70-destructuring-and-rest-operator/start.js new file mode 100644 index 0000000..b338931 --- /dev/null +++ b/70-destructuring-and-rest-operator/start.js @@ -0,0 +1,20 @@ +/** ЗАДАЧА 70 - Деструктуризация массивов и "rest" оператор + * + * Присвойте переменным "a", "b" и "с" значения, используя + * деструктуризацию массивов и "rest" оператор + * + * Значения переменных должны быть такими как в выводах в консоли + */ + +const arr = [1, 2, 3, 4, 5, 6, 7] + +// Напишите код здесь + +console.log(a) +// 1 + +console.log(b) +// 2 + +console.log(c) +// [3, 4, 5, 6, 7] diff --git a/71-spread-operator/finish.js b/71-spread-operator/finish.js new file mode 100644 index 0000000..20fef6e --- /dev/null +++ b/71-spread-operator/finish.js @@ -0,0 +1,15 @@ +/** ЗАДАЧА 71 - Spread Operator + * + * Используя оператор "spread" создайте новый массив + * Вывод в консоли должен быть таким же как в конце задания + */ + +const a = [1, 2] +const b = [4, 5] +const c = [8, 9, 10] +const d = 11 + +// Напишите код здесь + +console.log(combinedArray) +// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] diff --git a/71-spread-operator/solution.js b/71-spread-operator/solution.js new file mode 100644 index 0000000..2fe3799 --- /dev/null +++ b/71-spread-operator/solution.js @@ -0,0 +1,20 @@ +/** ЗАДАЧА 71 - Spread Operator + * + * Используя оператор "spread" создайте новый массив + * Вывод в консоли должен быть таким же как в конце задания + */ + +const a = [1, 2] +const b = [4, 5] +const c = [8, 9, 10] +const d = 11 + +const combinedArray = [0, ...a, 3, ...b, 6, 7, ...c, d] + +console.log(combinedArray) +// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] + +// Original arrays were not changed +console.log(a) +console.log(b) +console.log(c) diff --git a/71-spread-operator/start.js b/71-spread-operator/start.js new file mode 100644 index 0000000..20fef6e --- /dev/null +++ b/71-spread-operator/start.js @@ -0,0 +1,15 @@ +/** ЗАДАЧА 71 - Spread Operator + * + * Используя оператор "spread" создайте новый массив + * Вывод в консоли должен быть таким же как в конце задания + */ + +const a = [1, 2] +const b = [4, 5] +const c = [8, 9, 10] +const d = 11 + +// Напишите код здесь + +console.log(combinedArray) +// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] diff --git a/72-copy-array/finish.js b/72-copy-array/finish.js new file mode 100644 index 0000000..bf15f04 --- /dev/null +++ b/72-copy-array/finish.js @@ -0,0 +1,17 @@ +/** ЗАДАЧА 72 - Копия массива + * + * Создайте копию массива. + * При изменении копии массива оригинальный массив не должен изменяться + */ + +const a = [1, 2, 3] + +// Напишите код здесь + +b.push('newElement') + +console.log(a) +// [1, 2, 3] + +console.log(b) +// [1, 2, 3, "newElement"] diff --git a/72-copy-array/solution.js b/72-copy-array/solution.js new file mode 100644 index 0000000..5c0ecc3 --- /dev/null +++ b/72-copy-array/solution.js @@ -0,0 +1,24 @@ +/** ЗАДАЧА 72 - Копия массива + * + * Создайте копию массива. + * При изменении копии массива оригинальный массив не должен изменяться + */ + +const a = [1, 2, 3] + +// // OPTION 1 +// const b = [...a] + +// // OPTION 2 +// const b = Array.from(a) + +// OPTION 3 +const b = JSON.parse(JSON.stringify(a)) + +b.push('newElement') + +console.log(a) +// [1, 2, 3] + +console.log(b) +// [1, 2, 3, "newElement"] diff --git a/72-copy-array/start.js b/72-copy-array/start.js new file mode 100644 index 0000000..bf15f04 --- /dev/null +++ b/72-copy-array/start.js @@ -0,0 +1,17 @@ +/** ЗАДАЧА 72 - Копия массива + * + * Создайте копию массива. + * При изменении копии массива оригинальный массив не должен изменяться + */ + +const a = [1, 2, 3] + +// Напишите код здесь + +b.push('newElement') + +console.log(a) +// [1, 2, 3] + +console.log(b) +// [1, 2, 3, "newElement"] diff --git a/73-template-literals/finish.js b/73-template-literals/finish.js new file mode 100644 index 0000000..d8b1885 --- /dev/null +++ b/73-template-literals/finish.js @@ -0,0 +1,19 @@ +/** ЗАДАЧА 73 - Шаблонные строки + * + * Создайте функцию "carInfo", которая возвращает информацию о машине: + * - Автомобиль считается дешевым, если его цена <= 20000 + * - Автомобиль считается дорогим, если его цена > 20000 + * + * Выводы в консоли должны совпадать с теми, которые в конце задачи + */ + +const cars = [ + { brand: 'Honda', price: 13000 }, + { brand: 'Rolls-Royce', price: 120000 }, +] + +// Создайте функцию "carInfo" здесь + +cars.forEach((car) => console.log(carInfo(car))) +// Цена автомобиля Honda - 13000$ и это дешёвая машина +// Цена автомобиля Rolls-Royce - 120000$ и это дорогая машина diff --git a/73-template-literals/solution.js b/73-template-literals/solution.js new file mode 100644 index 0000000..a273680 --- /dev/null +++ b/73-template-literals/solution.js @@ -0,0 +1,23 @@ +/** ЗАДАЧА 73 - Шаблонные строки + * + * Создайте функцию "carInfo", которая возвращает информацию о машине: + * - Автомобиль считается дешевым, если его цена <= 20000 + * - Автомобиль считается дорогим, если его цена > 20000 + * + * Выводы в консоли должны совпадать с теми, которые в конце задачи + */ + +const cars = [ + { brand: 'Honda', price: 13000 }, + { brand: 'Rolls-Royce', price: 120000 }, +] + +function carInfo({ brand, price }) { + return `Цена автомобиля ${brand} - ${price}$ и это ${ + price > 20000 ? 'дорогая' : 'дешёвая' + } машина` +} + +cars.forEach((car) => console.log(carInfo(car))) +// Цена автомобиля Honda - 13000$ и это дешёвая машина +// Цена автомобиля Rolls-Royce - 120000$ и это дорогая машина diff --git a/73-template-literals/start.js b/73-template-literals/start.js new file mode 100644 index 0000000..d8b1885 --- /dev/null +++ b/73-template-literals/start.js @@ -0,0 +1,19 @@ +/** ЗАДАЧА 73 - Шаблонные строки + * + * Создайте функцию "carInfo", которая возвращает информацию о машине: + * - Автомобиль считается дешевым, если его цена <= 20000 + * - Автомобиль считается дорогим, если его цена > 20000 + * + * Выводы в консоли должны совпадать с теми, которые в конце задачи + */ + +const cars = [ + { brand: 'Honda', price: 13000 }, + { brand: 'Rolls-Royce', price: 120000 }, +] + +// Создайте функцию "carInfo" здесь + +cars.forEach((car) => console.log(carInfo(car))) +// Цена автомобиля Honda - 13000$ и это дешёвая машина +// Цена автомобиля Rolls-Royce - 120000$ и это дорогая машина diff --git a/74-object-destructuring/finish.js b/74-object-destructuring/finish.js new file mode 100644 index 0000000..ccf2492 --- /dev/null +++ b/74-object-destructuring/finish.js @@ -0,0 +1,36 @@ +/** ЗАДАЧА 74 - Деструктуризация объектов + * + * Создайте функцию "shortPerson", которая деструктуризирует объект + * и возвращает его короткую версию + * + * Пример результата: + * { n: "Mike", c: "Spain", a: 23, p: 100 } + * + * Если входной объект не имеет поля postsQuantity, + * он должен получить значение по умолчанию 0 + */ + +const person1 = { + name: 'Mike', + info: { + country: 'Spain', + age: 23, + }, + postsQuantity: 100, +} + +const person2 = { + name: 'Alice', + info: { + country: 'Italy', + age: 25, + }, +} + +// Напишите функцию "shortPerson" здесь + +console.log(shortPerson(person1)) +// { n: "Mike", c: "Spain", a: 23, p: 100 } + +console.log(shortPerson(person2)) +// { n: "Alice", c: "Italy", a: 25, p: 0 } diff --git a/74-object-destructuring/solution.js b/74-object-destructuring/solution.js new file mode 100644 index 0000000..9ceb720 --- /dev/null +++ b/74-object-destructuring/solution.js @@ -0,0 +1,45 @@ +/** ЗАДАЧА 74 - Деструктуризация объектов + * + * Создайте функцию "shortPerson", которая деструктуризирует объект + * и возвращает его короткую версию + * + * Пример результата: + * { n: "Mike", c: "Spain", a: 23, p: 100 } + * + * Если входной объект не имеет поля postsQuantity, + * он должен получить значение по умолчанию 0 + */ + +const person1 = { + name: 'Mike', + info: { + country: 'Spain', + age: 23, + }, + postsQuantity: 100, +} + +const person2 = { + name: 'Alice', + info: { + country: 'Italy', + age: 25, + }, +} + +const shortPerson = ({ + name: n, + info: { country: c, age: a }, + postsQuantity: p = 0, +}) => ({ + n, + c, + a, + p, +}) + +console.log(shortPerson(person1)) +// { n: "Mike", c: "Spain", a: 23, p: 100 } + +console.log(shortPerson(person2)) +// { n: "Alice", c: "Italy", a: 25, p: 0 } diff --git a/74-object-destructuring/start.js b/74-object-destructuring/start.js new file mode 100644 index 0000000..ccf2492 --- /dev/null +++ b/74-object-destructuring/start.js @@ -0,0 +1,36 @@ +/** ЗАДАЧА 74 - Деструктуризация объектов + * + * Создайте функцию "shortPerson", которая деструктуризирует объект + * и возвращает его короткую версию + * + * Пример результата: + * { n: "Mike", c: "Spain", a: 23, p: 100 } + * + * Если входной объект не имеет поля postsQuantity, + * он должен получить значение по умолчанию 0 + */ + +const person1 = { + name: 'Mike', + info: { + country: 'Spain', + age: 23, + }, + postsQuantity: 100, +} + +const person2 = { + name: 'Alice', + info: { + country: 'Italy', + age: 25, + }, +} + +// Напишите функцию "shortPerson" здесь + +console.log(shortPerson(person1)) +// { n: "Mike", c: "Spain", a: 23, p: 100 } + +console.log(shortPerson(person2)) +// { n: "Alice", c: "Italy", a: 25, p: 0 } diff --git a/75-iterate-over-string/finish.js b/75-iterate-over-string/finish.js new file mode 100644 index 0000000..f0e43af --- /dev/null +++ b/75-iterate-over-string/finish.js @@ -0,0 +1,15 @@ +/** ЗАДАЧА 75 - Перебор символов строки + * + * Подсчитайте количество строчных гласных букв в строке. + * Гласные буквы - a, e, i, o, u + */ + +let vowelsCount = 0 +const vowels = ['a', 'e', 'i', 'o', 'u'] + +const str = 'Today is the best day of my life' + +// Напишите код здесь + +console.log(vowelsCount) +// 9 diff --git a/75-iterate-over-string/solution.js b/75-iterate-over-string/solution.js new file mode 100644 index 0000000..7908088 --- /dev/null +++ b/75-iterate-over-string/solution.js @@ -0,0 +1,27 @@ +/** ЗАДАЧА 75 - Перебор символов строки + * + * Подсчитайте количество строчных гласных букв в строке. + * Гласные буквы - a, e, i, o, u + */ + +let vowelsCount = 0 +const vowels = ['a', 'e', 'i', 'o', 'u'] + +const str = 'Today is the best day of my life' + +// // OPTION 1 +// str.split('').forEach((char) => { +// if (vowels.includes(char)) { +// vowelsCount += 1 +// } +// }) + +// OPTION 2 +for (const char of str) { + if (vowels.includes(char)) { + vowelsCount += 1 + } +} + +console.log(vowelsCount) +// 9 diff --git a/75-iterate-over-string/start.js b/75-iterate-over-string/start.js new file mode 100644 index 0000000..f0e43af --- /dev/null +++ b/75-iterate-over-string/start.js @@ -0,0 +1,15 @@ +/** ЗАДАЧА 75 - Перебор символов строки + * + * Подсчитайте количество строчных гласных букв в строке. + * Гласные буквы - a, e, i, o, u + */ + +let vowelsCount = 0 +const vowels = ['a', 'e', 'i', 'o', 'u'] + +const str = 'Today is the best day of my life' + +// Напишите код здесь + +console.log(vowelsCount) +// 9 diff --git a/76-swap-values/finish.js b/76-swap-values/finish.js new file mode 100644 index 0000000..aa8cfe3 --- /dev/null +++ b/76-swap-values/finish.js @@ -0,0 +1,16 @@ +/** ЗАДАЧА 76 - Поменять местами значения двух переменных + * + * Поменяйте местами значения переменных "a" и "b". + * Не используйте для этого какие-либо новые переменные. + */ + +let a = 'first' +let b = 'second' + +console.log(a, b) +// first second + +// Напишите код здесь + +console.log(a, b) +// second first diff --git a/76-swap-values/solution.js b/76-swap-values/solution.js new file mode 100644 index 0000000..24b596e --- /dev/null +++ b/76-swap-values/solution.js @@ -0,0 +1,15 @@ +/** ЗАДАЧА 76 - Поменять местами значения двух переменных + * + * Поменяйте местами значения переменных "a" и "b". + * Не используйте для этого какие-либо новые переменные. + */ + +let a = 'first' +let b = 'second' + +console.log(a, b) +// first second +;[b, a] = [a, b] + +console.log(a, b) +// second first diff --git a/76-swap-values/start.js b/76-swap-values/start.js new file mode 100644 index 0000000..aa8cfe3 --- /dev/null +++ b/76-swap-values/start.js @@ -0,0 +1,16 @@ +/** ЗАДАЧА 76 - Поменять местами значения двух переменных + * + * Поменяйте местами значения переменных "a" и "b". + * Не используйте для этого какие-либо новые переменные. + */ + +let a = 'first' +let b = 'second' + +console.log(a, b) +// first second + +// Напишите код здесь + +console.log(a, b) +// second first diff --git a/77-function-closures/finish.js b/77-function-closures/finish.js new file mode 100644 index 0000000..3bcba59 --- /dev/null +++ b/77-function-closures/finish.js @@ -0,0 +1,32 @@ +/** ЗАДАЧА 77 - Замыкания + * + * 1. Создайте функцию "createGreeting", внутри которой создайте: + * - переменную "greetingString" с значением "Hey, this is" + * (объявите ее используя "let") + * - функцию "greet" с одним параметром, которая должна возвращать + * строку-приветствие на основании "greetingString" и параметра, + * например, "Hey, this is Bob" + * - функцию "changeGreeting" с одним параметром, которая должна + * изменять значение переменной "greetingString" + * + * 2. Функция "createGreeting" должа вернуть объект с двумя методами: + * - greet + * - changeGreeting + */ + +const greeting1 = createGreeting() + +console.log(greeting1.greet('Bob')) +// Hey, this is Bob + +greeting1.changeGreeting('Good Morning from') + +console.log(greeting1.greet('Emily')) +// Good Morning from Emily + +/* ____________ */ + +const greeting2 = createGreeting() + +console.log(greeting2.greet('Emily')) +// Hey, this is Emily diff --git a/77-function-closures/solution.js b/77-function-closures/solution.js new file mode 100644 index 0000000..226dc82 --- /dev/null +++ b/77-function-closures/solution.js @@ -0,0 +1,54 @@ +/** ЗАДАЧА 77 - Замыкания + * + * 1. Создайте функцию "createGreeting", внутри которой создайте: + * - переменную "greetingString" с значением "Hey, this is" + * (объявите ее используя "let") + * - функцию "greet" с одним параметром, которая должна возвращать + * строку-приветствие на основании "greetingString" и параметра, + * например, "Hey, this is Bob" + * - функцию "changeGreeting" с одним параметром, которая должна + * изменять значение переменной "greetingString" + * + * 2. Функция "createGreeting" должа вернуть объект с двумя методами: + * - greet + * - changeGreeting + */ + +const createGreeting = () => { + let greetingString = 'Hey, this is' + + function greet(name) { + return `${greetingString} ${name}` + } + + function changeGreeting(newGreeting) { + greetingString = newGreeting + } + + return { + greet, + changeGreeting, + } +} + +const greeting1 = createGreeting() + +console.log(greeting1.greet('Bob')) +// Hey, this is Bob + +greeting1.changeGreeting('Good Morning from') + +console.log(greeting1.greet('Emily')) +// Good Morning from Emily + +greeting1.changeGreeting('Good Evening') + +console.log(greeting1.greet('Emily')) +// Good Evening Emily + +/* ____________ */ + +const greeting2 = createGreeting() + +console.log(greeting2.greet('Emily')) +// Hey, this is Emily diff --git a/77-function-closures/start.js b/77-function-closures/start.js new file mode 100644 index 0000000..3bcba59 --- /dev/null +++ b/77-function-closures/start.js @@ -0,0 +1,32 @@ +/** ЗАДАЧА 77 - Замыкания + * + * 1. Создайте функцию "createGreeting", внутри которой создайте: + * - переменную "greetingString" с значением "Hey, this is" + * (объявите ее используя "let") + * - функцию "greet" с одним параметром, которая должна возвращать + * строку-приветствие на основании "greetingString" и параметра, + * например, "Hey, this is Bob" + * - функцию "changeGreeting" с одним параметром, которая должна + * изменять значение переменной "greetingString" + * + * 2. Функция "createGreeting" должа вернуть объект с двумя методами: + * - greet + * - changeGreeting + */ + +const greeting1 = createGreeting() + +console.log(greeting1.greet('Bob')) +// Hey, this is Bob + +greeting1.changeGreeting('Good Morning from') + +console.log(greeting1.greet('Emily')) +// Good Morning from Emily + +/* ____________ */ + +const greeting2 = createGreeting() + +console.log(greeting2.greet('Emily')) +// Hey, this is Emily diff --git a/78-classes/finish.js b/78-classes/finish.js new file mode 100644 index 0000000..83314c5 --- /dev/null +++ b/78-classes/finish.js @@ -0,0 +1,22 @@ +/** ЗАДАЧА 78 - Классы + * + * 1. Создайте класс "Fruit" + * + * 2. У каждого экземпляра этого класса должно быть + * два собственных свойства: + * - title + * - price + * + * 3. Также нужно добавить метод "priceInfo", который + * будет возвращать строку, содержащую название и цену фрукта + * + * 4. Выводы в консоли должны совпасть + */ + +const apple = new Fruit('Apple', 2) +console.log(apple.priceInfo()) +// Price of the Apple is 2$ + +const orange = new Fruit('Orange', 3) +console.log(orange.priceInfo()) +// Price of the Orange is 3$ diff --git a/78-classes/solution.js b/78-classes/solution.js new file mode 100644 index 0000000..c9afb20 --- /dev/null +++ b/78-classes/solution.js @@ -0,0 +1,33 @@ +/** ЗАДАЧА 78 - Классы + * + * 1. Создайте класс "Fruit" + * + * 2. У каждого экземпляра этого класса должно быть + * два собственных свойства: + * - title + * - price + * + * 3. Также нужно добавить метод "priceInfo", который + * будет возвращать строку, содержащую название и цену фрукта + * + * 4. Выводы в консоли должны совпасть + */ + +class Fruit { + constructor(title, price) { + this.title = title + this.price = price + } + + priceInfo() { + return `Price of the ${this.title} is ${this.price}$` + } +} + +const apple = new Fruit('Apple', 2) +console.log(apple.priceInfo()) +// Price of the Apple is 2$ + +const orange = new Fruit('Orange', 3) +console.log(orange.priceInfo()) +// Price of the Orange is 3$ diff --git a/78-classes/start.js b/78-classes/start.js new file mode 100644 index 0000000..83314c5 --- /dev/null +++ b/78-classes/start.js @@ -0,0 +1,22 @@ +/** ЗАДАЧА 78 - Классы + * + * 1. Создайте класс "Fruit" + * + * 2. У каждого экземпляра этого класса должно быть + * два собственных свойства: + * - title + * - price + * + * 3. Также нужно добавить метод "priceInfo", который + * будет возвращать строку, содержащую название и цену фрукта + * + * 4. Выводы в консоли должны совпасть + */ + +const apple = new Fruit('Apple', 2) +console.log(apple.priceInfo()) +// Price of the Apple is 2$ + +const orange = new Fruit('Orange', 3) +console.log(orange.priceInfo()) +// Price of the Orange is 3$ diff --git a/79-iterate-over-object/finish.js b/79-iterate-over-object/finish.js new file mode 100644 index 0000000..27cbce2 --- /dev/null +++ b/79-iterate-over-object/finish.js @@ -0,0 +1,23 @@ +/** ЗАДАЧА 79 - Перебор свойств объекта + * + * 1. Создайте функцию "sumObjectValues", которая будет суммировть + * все значения свойств, которые являются числами. + * + * 2. Сумму чисел необходимо вернуть из функции + * + * 3. Убедитесь, что итерация выполняется только + * по собственным свойствам объекта + */ + +const objectWithNumbers = { + a: 10, + b: 20, + c: 'string', + d: 12, +} + +// Создайте функцию здесь + +const result = sumObjectValues(objectWithNumbers) +console.log(result) +//42 diff --git a/79-iterate-over-object/solution.js b/79-iterate-over-object/solution.js new file mode 100644 index 0000000..bc20e6b --- /dev/null +++ b/79-iterate-over-object/solution.js @@ -0,0 +1,33 @@ +/** ЗАДАЧА 79 - Перебор свойств объекта + * + * 1. Создайте функцию "sumObjectValues", которая будет суммировть + * все значения свойств, которые являются числами. + * + * 2. Сумму чисел необходимо вернуть из функции + * + * 3. Убедитесь, что итерация выполняется только + * по собственным свойствам объекта + */ + +const objectWithNumbers = { + a: 10, + b: 20, + c: 'string', + d: 12, +} + +function sumObjectValues(nums) { + let sum = 0 + + Object.keys(nums).forEach((key) => { + if (typeof nums[key] === 'number') { + sum += nums[key] + } + }) + + return sum +} + +const result = sumObjectValues(objectWithNumbers) +console.log(result) +//42 diff --git a/79-iterate-over-object/start.js b/79-iterate-over-object/start.js new file mode 100644 index 0000000..27cbce2 --- /dev/null +++ b/79-iterate-over-object/start.js @@ -0,0 +1,23 @@ +/** ЗАДАЧА 79 - Перебор свойств объекта + * + * 1. Создайте функцию "sumObjectValues", которая будет суммировть + * все значения свойств, которые являются числами. + * + * 2. Сумму чисел необходимо вернуть из функции + * + * 3. Убедитесь, что итерация выполняется только + * по собственным свойствам объекта + */ + +const objectWithNumbers = { + a: 10, + b: 20, + c: 'string', + d: 12, +} + +// Создайте функцию здесь + +const result = sumObjectValues(objectWithNumbers) +console.log(result) +//42 diff --git a/80-sum-of-positive-and-negative-numbers/finish.js b/80-sum-of-positive-and-negative-numbers/finish.js new file mode 100644 index 0000000..5f4d7a2 --- /dev/null +++ b/80-sum-of-positive-and-negative-numbers/finish.js @@ -0,0 +1,20 @@ +/** ЗАДАЧА 80 - Сумма положительных и отрицательных чисел + * + * 1. Создайте функцию "sumPositiveNegative", которая принимает массив + * и суммирует отдельно положительные и отрицательные числа. + * + * 2. Функция должна вернуть такой объект: + * { + * positive: 74, // сумма всех положительных чисел + * negative: -54 // сумма всех отрицательных чисел + * } + */ + +const nums = [10, -12, 30, -1, -8, 0, 14, -33, 20] + +// Создайте функцию "sumPositiveNegative" здесь + +const result = sumPositiveNegative(nums) + +console.log(result) +// { positive: 74, negative: -54 } diff --git a/80-sum-of-positive-and-negative-numbers/solution.js b/80-sum-of-positive-and-negative-numbers/solution.js new file mode 100644 index 0000000..a618b6a --- /dev/null +++ b/80-sum-of-positive-and-negative-numbers/solution.js @@ -0,0 +1,37 @@ +/** ЗАДАЧА 80 - Сумма положительных и отрицательных чисел + * + * 1. Создайте функцию "sumPositiveNegative", которая принимает массив + * и суммирует отдельно положительные и отрицательные числа. + * + * 2. Функция должна вернуть такой объект: + * { + * positive: 74, // сумма всех положительных чисел + * negative: -54 // сумма всех отрицательных чисел + * } + */ + +const nums = [10, -12, 30, -1, -8, 0, 14, -33, 20] + +function sumPositiveNegative(arr) { + return arr.reduce( + (sums, num) => { + if (num > 0) { + return { + ...sums, + positive: sums.positive + num, + } + } + + return { + ...sums, + negative: sums.negative + num, + } + }, + { positive: 0, negative: 0 } + ) +} + +const result = sumPositiveNegative(nums) + +console.log(result) +// { positive: 74, negative: -54 } diff --git a/80-sum-of-positive-and-negative-numbers/start.js b/80-sum-of-positive-and-negative-numbers/start.js new file mode 100644 index 0000000..5f4d7a2 --- /dev/null +++ b/80-sum-of-positive-and-negative-numbers/start.js @@ -0,0 +1,20 @@ +/** ЗАДАЧА 80 - Сумма положительных и отрицательных чисел + * + * 1. Создайте функцию "sumPositiveNegative", которая принимает массив + * и суммирует отдельно положительные и отрицательные числа. + * + * 2. Функция должна вернуть такой объект: + * { + * positive: 74, // сумма всех положительных чисел + * negative: -54 // сумма всех отрицательных чисел + * } + */ + +const nums = [10, -12, 30, -1, -8, 0, 14, -33, 20] + +// Создайте функцию "sumPositiveNegative" здесь + +const result = sumPositiveNegative(nums) + +console.log(result) +// { positive: 74, negative: -54 }