Skip to content

Commit 5d46140

Browse files
committed
[LES-3.9/st-compl] weakSet-obj
Practice with "new WeakSet(), add/has() meth's". Worth noting: - all this lesson/practice (note the solutions). FS-dev: B-4 / JS advanced
1 parent 9eb79a7 commit 5d46140

File tree

1 file changed

+58
-0
lines changed
  • full-stack-dev/4-js-advanced/3-set-and-map/3-9-weakSet-obj

1 file changed

+58
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
'use strict';
2+
3+
// Задание 1:
4+
// Представь, что мы пишем ядро фреймворка. У нас есть функция render(component), которая отрисовывает компоненты на экране.
5+
// 1. Создай WeakSet с именем trustedComponents.
6+
// 2. Напиши код, где создаются два объекта:
7+
// - validComponent = { id: 1 } (этот нужно "официально зарегистрировать" в нашем наборе).
8+
// - fakeComponent = { id: 1 } (этот регистрировать не нужно, это подделка).
9+
// 3. Напиши функцию render(comp), которая:
10+
// - Принимает объект.
11+
// - Проверяет, есть ли он в trustedComponents.
12+
// - Если есть — выводит в консоль "Отрисовка компонента...".
13+
// - Если нет — выводит "Ошибка! Неизвестный компонент.".
14+
15+
const trustedComponents = new WeakSet();
16+
17+
const validComponent = { id: 1 };
18+
const fakeComponent = { id: 1 };
19+
20+
trustedComponents.add(validComponent);
21+
22+
function render(comp) {
23+
if (trustedComponents.has(comp)) {
24+
console.log('Отрисовка компонента...');
25+
} else {
26+
console.log('Ошибка! Неизвестный компонент.');
27+
}
28+
}
29+
30+
render(validComponent); // "Отрисовка компонента..."
31+
render(fakeComponent); // "Ошибка! Неизвестный компонент."
32+
33+
// Задание 2:
34+
// Представь, что мы разрабатываем модуль для интернет-магазина. У нас есть промокоды (объекты). Промокод можно применить только один раз.
35+
// 1. Создай WeakSet с именем usedCodes.
36+
// 2. Напиши функцию applyPromo(code), которая:
37+
// - Проверяет, был ли этот код уже использован.
38+
// - Если да — выводит: "Ошибка! Код уже использован".
39+
// - Если нет — добавляет код в "использованные" и выводит: "Успех! Скидка применена".
40+
// 3. Проверь работу:
41+
// - Создай объект promo = { discount: "10%" }.
42+
// - Вызови applyPromo(promo) первый раз (должен быть успех).
43+
// - Вызови applyPromo(promo) второй раз (должна быть ошибка).
44+
45+
const usedCodes = new WeakSet();
46+
const promo = { discount: '10%' };
47+
48+
function applyPromo(code) {
49+
if (!usedCodes.has(code)) {
50+
usedCodes.add(code); // второй аргумент, типа true.. не надо (это не WeakMap().. там можно/нужно, в WeakSet() нет)
51+
console.log('Успех! Скидка применена');
52+
} else {
53+
console.log('Ошибка! Код уже использован');
54+
}
55+
}
56+
57+
applyPromo(promo); // "Успех! Скидка применена"
58+
applyPromo(promo); // "Ошибка! Код уже использован"

0 commit comments

Comments
 (0)