Skip to content

Commit 9eb79a7

Browse files
committed
[LES-3.8/st-compl] weakMap-obj
Practice with "new WeakMap(), set/get(), Object.keys/values()". Worth noting: - all this lesson/practice (task 2). FS-dev: B-4 / JS advanced
1 parent 5f827a4 commit 9eb79a7

File tree

1 file changed

+65
-0
lines changed
  • full-stack-dev/4-js-advanced/3-set-and-map/3-8-weakMap-obj

1 file changed

+65
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
'use strict';
2+
3+
// Задание 1:
4+
// 1. Создай массив messages с парой объектов-сообщений.
5+
// 2. Создай WeakMap для хранения статуса "прочитано".
6+
// 3. Напиши код, который помечает первое сообщение как прочитанное (true).
7+
// 4. Напиши код, который проверяет статус прочтения для первого (должно быть true) и второго (должно быть false или undefined) сообщения и выводит это в консоль.
8+
9+
const messages = [{ text1: 'Hello!' }, { text2: 'Hay!' }];
10+
const messagesWeak = new WeakMap();
11+
12+
messagesWeak.set(messages[0], true);
13+
14+
console.log(messagesWeak.get(messages[0])); // true
15+
console.log(messagesWeak.get(messages[1])); // undefined
16+
17+
// !! Задание 2:
18+
// Логика такая:
19+
// 1. Если результат для этого user уже есть в cache — верни его сразу (не делая вычислений).
20+
// 2. Если нет — "вычисли" (сгенерируй случайное число), запиши в cache и верни.
21+
22+
let cache = new WeakMap();
23+
24+
function calculateUser(user) {
25+
// 1. Проверь: если user уже есть в cache, верни значение из cache.
26+
// Твой код здесь...
27+
if (cache.has(user)) {
28+
return cache.get(user);
29+
}
30+
31+
// 2. Если нет, делаем "вычисления"
32+
let result = Math.random(); // Имитация сложной работы
33+
34+
// 3. Запиши result в cache для этого user
35+
// Твой код здесь...
36+
cache.set(user, result);
37+
38+
return result;
39+
}
40+
41+
let bob = { name: 'Bob' };
42+
43+
let result1 = calculateUser(bob); // Должно вычислить (случайное число)
44+
let result2 = calculateUser(bob); // Должно взять из кеша (то же самое число!)
45+
46+
console.log(result1); // 0.2011841727034649
47+
console.log(result2); // 0.2011841727034649
48+
console.log(result1 === result2); // Должно быть true
49+
50+
// Задание 3:
51+
// Есть объект user = { name: "Alex" }.
52+
// 1. Создай WeakMap с именем visits.
53+
// 2. Запиши туда, что user был у нас 5 раз.
54+
// 3. Докажи кодом, что само свойство "5" не находится внутри объекта user (выведи ключи объекта или попробуй обратиться к свойству напрямую), но при этом мы можем получить его из visits.
55+
56+
const user = { name: 'Alex' };
57+
const visits = new WeakMap();
58+
59+
visits.set(user, 5);
60+
61+
console.log(visits); // WeakMap {{…} => 5}
62+
console.log(Object.keys(user)); // [ 'name' ]
63+
console.log(Object.values(user)); // [ 'Alex' ]
64+
65+
console.log(visits.get(user)); // 5

0 commit comments

Comments
 (0)