Skip to content

Commit b2e9e61

Browse files
committed
[LES-7.7/st-compl] helper-functions
Practice with "helper" functions, working them in "filter/map()" meth's. Worth noting: - alternative solution in task 2. FS-dev: B-3 / JS basic
1 parent 6418d12 commit b2e9e61

File tree

1 file changed

+157
-0
lines changed
  • full-stack-dev/3-js-basic/7-functions/7-7-helper-functions

1 file changed

+157
-0
lines changed
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
// Задание 1:
2+
// Есть функция formatUserMessage, которая выполняет сразу несколько действий. Это делает её громоздкой и трудной для понимания.
3+
// Перепиши (проведи рефакторинг) этот код так, чтобы formatUserMessage стала основной функцией, а вся логика была вынесена в две отдельные вспомогательные функции.
4+
5+
// function formatUserMessage(fullName, comment) {
6+
// // 1. Убираем лишние пробелы и приводим имя к нужному виду
7+
// const nameParts = fullName.trim().split(' ');
8+
// const firstName = nameParts[0];
9+
// const lastNameInitial = nameParts[1].charAt(0).toUpperCase() + '.';
10+
// const formattedName = `${firstName} ${lastNameInitial}`;
11+
//
12+
// // 2. Обрезаем слишком длинный комментарий
13+
// let formattedComment = comment.trim();
14+
// if (formattedComment.length > 50) {
15+
// formattedComment = formattedComment.substring(0, 47) + '...';
16+
// }
17+
//
18+
// // 3. Собираем финальное сообщение
19+
// return `${formattedName}: "${formattedComment}"`;
20+
// }
21+
//
22+
// // Пример вызова
23+
// const message = formatUserMessage(
24+
// ' Иван петров ',
25+
// ' Этот комментарий слишком длинный и его нужно обязательно обрезать. '
26+
// );
27+
// console.log(message); // Ожидаемый результат: "Иван П.: Этот комментарий слишком длинный и его нужно о..."
28+
29+
function formatName(fullName) {
30+
const nameParts = fullName.trim().split(' ');
31+
const firstName = nameParts[0];
32+
const lastNameInitial = nameParts[1].charAt(0).toUpperCase() + '.';
33+
const formattedName = `${firstName} ${lastNameInitial}`;
34+
35+
return formattedName;
36+
}
37+
38+
function formatComment(comment) {
39+
let formattedComment = comment.trim();
40+
41+
if (formattedComment.length > 50) {
42+
formattedComment = formattedComment.substring(0, 47) + '...';
43+
}
44+
45+
return formattedComment;
46+
}
47+
48+
function formatUserMessage(fullName, comment) {
49+
const formattedName = formatName(fullName);
50+
const formattedComment = formatComment(comment);
51+
52+
return `${formattedName}: ${formattedComment}`;
53+
}
54+
55+
const message = formatUserMessage(
56+
' Иван петров ',
57+
' Этот комментарий слишком длинный и его нужно обязательно обрезать. '
58+
);
59+
60+
console.log(message); // Иван П.: Этот комментарий слишком длинный и его нужно об...
61+
62+
// Задание 2:
63+
// У нас есть массив заявок от пользователей. Нам нужно отобрать только "валидных" пользователей (у кого есть имя и возраст 18+) и для каждого из них сформировать строку приветствия.
64+
// Перепиши этот код, используя вспомогательные функции. Тебе понадобятся:
65+
// - Функция-валидатор isValidUser(user), которая будет проверять пользователя и возвращать true или false.
66+
// - Функция-форматтер formatGreeting(user), которая будет создавать строку для валидного пользователя.
67+
// - Основная функция processApplications, которая будет использовать эти две функции для обработки массива. (Бонусный балл, если используешь методы массивов .filter() и .map()).
68+
69+
// const applications = [
70+
// { name: 'Сергей', age: 25 },
71+
// { name: '', age: 30 }, // невалидное имя
72+
// { name: 'Анна', age: 17 }, // невалидный возраст
73+
// { name: 'Виктор', age: 41 },
74+
// ];
75+
76+
// function processApplications(apps) {
77+
// const validUsersGreetings = [];
78+
// for (const user of apps) {
79+
// // Проверка имени и возраста в одном месте
80+
// if (user.name.length > 0 && user.age >= 18) {
81+
// // Форматирование строки тоже здесь
82+
// const greeting = `Здравствуйте, ${user.name}! Вам ${user.age} лет.`;
83+
// validUsersGreetings.push(greeting);
84+
// }
85+
// }
86+
// return validUsersGreetings;
87+
// }
88+
89+
// const greetings = processApplications(applications);
90+
// console.log(greetings);
91+
92+
/* Ожидаемый результат:
93+
[
94+
"Здравствуйте, Сергей! Вам 25 лет.",
95+
"Здравствуйте, Виктор! Вам 41 лет."
96+
]
97+
*/
98+
99+
const applications = [
100+
{ name: 'Сергей', age: 25 },
101+
{ name: '', age: 30 },
102+
{ name: 'Анна', age: 17 },
103+
{ name: 'Виктор', age: 41 },
104+
];
105+
106+
function isValidUser(usersArr) {
107+
return usersArr.filter((user) => user.name.length > 0 && user.age >= 18);
108+
}
109+
110+
function formatGreeting(validUsersArr) {
111+
return validUsersArr.map(
112+
(user) => `Здравствуйте, ${user.name}! Вам ${user.age} лет.`
113+
);
114+
}
115+
116+
function processApplications(apps) {
117+
const validUsers = isValidUser(apps);
118+
const addGreetings = formatGreeting(validUsers);
119+
120+
return addGreetings;
121+
}
122+
123+
const greetings = processApplications(applications);
124+
console.log(greetings);
125+
126+
/*
127+
[
128+
"Здравствуйте, Сергей! Вам 25 лет.",
129+
"Здравствуйте, Виктор! Вам 41 лет."
130+
]
131+
*/
132+
133+
// ?? альтернативное решение
134+
// Валидатор, который работает с ОДНИМ пользователем и возвращает true/false.
135+
function isValidUser(user) {
136+
return user.name.length > 0 && user.age >= 18;
137+
}
138+
139+
// Форматтер, который работает с ОДНИМ пользователем и возвращает строку.
140+
function formatGreeting(user) {
141+
return `Здравствуйте, ${user.name}! Вам ${user.age} лет.`;
142+
}
143+
144+
// Основная функция использует хелперы прямо в методах .filter() и .map()
145+
function processApplications(apps) {
146+
return apps.filter(isValidUser).map(formatGreeting);
147+
}
148+
149+
const newGreetings = processApplications(applications);
150+
console.log(newGreetings);
151+
152+
/*
153+
[
154+
"Здравствуйте, Сергей! Вам 25 лет.",
155+
"Здравствуйте, Виктор! Вам 41 лет."
156+
]
157+
*/

0 commit comments

Comments
 (0)