|
| 1 | +// Задание 1: |
| 2 | +// Напиши собственную реализацию функции высшего порядка, похожую на Array.forEach. |
| 3 | +// 1. Назови её processArray. |
| 4 | +// 2. Она должна принимать два аргумента: array (массив для обработки) и callback (функция, которую нужно применить к каждому элементу). |
| 5 | +// 3. Твоя функция должна перебрать каждый элемент массива и для каждого из них вызвать callback, передав в него сам элемент. |
| 6 | + |
| 7 | +const numbers = [1, 2, 3, 4]; |
| 8 | + |
| 9 | +function processArray(array, callback) { |
| 10 | + for (const num of array) { |
| 11 | + callback(num); |
| 12 | + } |
| 13 | +} |
| 14 | + |
| 15 | +processArray(numbers, function (number) { |
| 16 | + console.log(`Квадрат числа ${number} равен ${number * number}`); |
| 17 | +}); |
| 18 | + |
| 19 | +/* |
| 20 | +Вывод в консоли: |
| 21 | +Квадрат числа 1 равен 1 |
| 22 | +Квадрат числа 2 равен 4 |
| 23 | +Квадрат числа 3 равен 9 |
| 24 | +Квадрат числа 4 равен 16 |
| 25 | +*/ |
| 26 | + |
| 27 | +// Задание 2: |
| 28 | +// Напиши функцию-фабрику createLogger. |
| 29 | +// 1. Эта функция должна принимать один аргумент type (например, строка "INFO", "WARN" или "ERROR"). |
| 30 | +// 2. Она должна возвращать новую функцию. |
| 31 | +// 3. Возвращенная функция, в свою очередь, должна принимать один аргумент message (строку с сообщением). |
| 32 | +// 4. Когда мы вызываем возвращенную функцию, она должна выводить в консоль отформатированное сообщение, включающее type, который она "запомнила". |
| 33 | +// Подсказка: Вспомни наш теоретический пример createMultiplier и механизм замыкания (closure). Он здесь — ключ к решению. |
| 34 | + |
| 35 | +function createLogger(type) { |
| 36 | + return function (message) { |
| 37 | + return `[${type}]: ${message}`; |
| 38 | + }; |
| 39 | +} |
| 40 | + |
| 41 | +const infoLogger = createLogger('INFO'); |
| 42 | +const warnLogger = createLogger('WARN'); |
| 43 | + |
| 44 | +console.log(infoLogger('Система успешно запущена.')); // "[INFO]: Система успешно запущена." |
| 45 | +console.log(warnLogger('Внимание: свободное место заканчивается.')); // "[WARN]: Внимание: свободное место заканчивается." |
| 46 | + |
| 47 | +// Задание 3: |
| 48 | +// У тебя есть массив объектов. Тебе нужно написать цепочку вызовов, чтобы получить строку с именами активных пользователей в верхнем регистре, разделенными запятой. |
| 49 | +// Нужно сделать следующее: |
| 50 | +// 1. Отфильтровать массив, оставив только активных пользователей (isActive: true). |
| 51 | +// 2. Из отфильтрованного массива получить новый массив, содержащий только имена пользователей. |
| 52 | +// 3. Преобразовать все имена в верхний регистр. |
| 53 | +// 4. Объединить массив имен в одну строку, где имена разделены запятой. |
| 54 | +// Используй стандартные методы массивов: filter, map и join. |
| 55 | +// Подсказка: Представь, что данные проходят по конвейеру. users -> filter -> map -> join. Каждый метод передает свой результат следующему. |
| 56 | + |
| 57 | +const users = [ |
| 58 | + { name: 'Alice', age: 30, isActive: true }, |
| 59 | + { name: 'Bob', age: 25, isActive: false }, |
| 60 | + { name: 'Charlie', age: 35, isActive: true }, |
| 61 | + { name: 'David', age: 22, isActive: false }, |
| 62 | + { name: 'Eve', age: 28, isActive: true }, |
| 63 | +]; |
| 64 | + |
| 65 | +const activeUsersString = users |
| 66 | + .filter((user) => user.isActive === true) |
| 67 | + .map((user) => user.name.toUpperCase()) |
| 68 | + .join(','); |
| 69 | + |
| 70 | +console.log(activeUsersString); // "ALICE,CHARLIE,EVE" |
| 71 | +console.log(users); // без изменений |
0 commit comments