Skip to content

Commit 5757298

Browse files
committed
[TM-10.6/st-compl] training-module
Solving 7 tasks. Working with "callback func's, predicate", etc. Worth noting: - task 5 (note the solutions). FS-dev: B-3 / JS basic
1 parent b1b3fe7 commit 5757298

File tree

1 file changed

+144
-0
lines changed
  • full-stack-dev/3-js-basic/10-higher-order-functions/10-6-training-module

1 file changed

+144
-0
lines changed
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
'use strict';
2+
3+
// Задание 1:
4+
// Создайте функцию высшего порядка, которая принимает число и возвращает новую функцию для умножения на это число.
5+
6+
function createMultiplier(multiplier) {
7+
if (typeof multiplier !== 'number') {
8+
return null; // если.. некорректные входные данные
9+
}
10+
11+
return (num) => {
12+
if (typeof num !== 'number') {
13+
return null; // если.. некорректные входные данные
14+
}
15+
16+
return num * multiplier;
17+
};
18+
}
19+
20+
const double = createMultiplier(2);
21+
console.log(double(5)); // 10
22+
23+
const triple = createMultiplier(''); // "Вернулась не функция!"
24+
if (triple) {
25+
console.log(triple(3));
26+
} else {
27+
console.log('Вернулась не функция!');
28+
}
29+
30+
// Задание 2:
31+
// Создайте функцию, которая принимает callback-функцию и два числа, а затем применяет эту callback-функцию к этим числам.
32+
33+
function processNumbers(x, y, callback) {
34+
if (typeof x !== 'number' || typeof y !== 'number') {
35+
return null;
36+
}
37+
38+
if (typeof callback !== 'function') {
39+
return () => {};
40+
}
41+
42+
return callback(x, y);
43+
}
44+
45+
console.log(processNumbers(5, 3, (x, y) => x + y)); // 8
46+
console.log(processNumbers(10, 4, (x, y) => x - y)); // 6
47+
48+
// Задание 3:
49+
// Создайте функцию, которая принимает строку и возвращает новую функцию для проверки, содержит ли переданная ей строка заданный текст.
50+
51+
function createContainsChecker(searchText) {
52+
searchText = searchText.trim();
53+
return (str) => str.trim().includes(searchText);
54+
}
55+
56+
const hasHello = createContainsChecker('hello');
57+
console.log(hasHello('hello world')); // true
58+
59+
// Задание 4:
60+
// Создайте функцию, которая принимает число и возвращает новую функцию для сравнения чисел с этим значением.
61+
62+
function createComparator(x) {
63+
return (y) => y > x;
64+
}
65+
66+
const isGreaterThan5 = createComparator(5);
67+
console.log(isGreaterThan5(8)); // true
68+
69+
// Задание 5:
70+
// Создайте функцию, которая принимает функцию-предикат и возвращает новую функцию для фильтрации массивов по этому условию.
71+
72+
function createFilter(predicate) {
73+
if (typeof predicate !== 'function') {
74+
return () => {};
75+
}
76+
77+
return (arr) => {
78+
if (!Array.isArray(arr)) {
79+
return null;
80+
}
81+
82+
const filteredArr = [];
83+
84+
for (const el of arr) {
85+
if (predicate(el)) {
86+
filteredArr.push(el);
87+
}
88+
}
89+
90+
return filteredArr;
91+
};
92+
}
93+
94+
const filterPositive = createFilter((x) => x > 0);
95+
console.log(filterPositive([1, -2, 3, -4, 5])); // [ 1, 3, 5 ]
96+
97+
// Задание 6:
98+
// Создайте функцию, которая принимает начальное значение и возвращает новую функцию для накопления суммы.
99+
100+
function createAccumulator(initSum) {
101+
if (typeof initSum !== 'number') {
102+
return () => {};
103+
}
104+
105+
return (num) => {
106+
if (typeof num !== 'number') {
107+
return NaN;
108+
}
109+
110+
return (initSum += num);
111+
};
112+
}
113+
114+
const acc = createAccumulator(10);
115+
console.log(acc(5)); // 15
116+
console.log(acc(3)); // 18
117+
118+
const acc2 = createAccumulator('');
119+
console.log(acc2); // [Function (anonymous)]
120+
console.log(acc2(5)); // undefined
121+
122+
// Задание 7:
123+
// Создайте функцию, которая принимает два числа и возвращает новую функцию для проверки, находится ли переданное ей число в диапазоне между этими значениями.
124+
125+
function createRangeChecker(minRange, maxRange) {
126+
if (typeof minRange !== 'number' || typeof maxRange !== 'number') {
127+
return () => {};
128+
}
129+
130+
return (num) => {
131+
if (typeof num !== 'number') {
132+
return NaN;
133+
}
134+
135+
return num >= minRange && num <= maxRange;
136+
};
137+
}
138+
139+
const inRange = createRangeChecker(10, 20);
140+
console.log(inRange(15)); // true
141+
142+
const inRange2 = createRangeChecker(10, true);
143+
console.log(inRange2); // [Function (anonymous)]
144+
console.log(inRange2(99)); // undefined

0 commit comments

Comments
 (0)