Skip to content

Commit e9e28c5

Browse files
committed
[LES-10.1/st-compl] intro-to-higher-functions
Practice with "highest order/first class" func's. Using chain of meth's. Worth noting: - all this lesson/practice. FS-dev: B-3 / JS basic
1 parent f1b7d99 commit e9e28c5

File tree

1 file changed

+71
-0
lines changed
  • full-stack-dev/3-js-basic/10-higher-order-functions/10-1-intro-to-higher-functions

1 file changed

+71
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
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

Comments
 (0)