Skip to content

Commit 13f4095

Browse files
committed
[LES-3.6/st-compl] ways-to-iterate-map-obj
Practice with "for...of(), map.values(), destructuring, filter/map()". Worth noting: - all this lesson/practice (task 2, alternative solution). FS-dev: B-4 / JS advanced
1 parent d318ddd commit 13f4095

File tree

1 file changed

+68
-0
lines changed
  • full-stack-dev/4-js-advanced/3-set-and-map/3-6-ways-to-iterate-map-obj

1 file changed

+68
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
'use strict';
2+
3+
// Задание 1:
4+
// У нас есть Map, который хранит список продуктов в корзине и их стоимость.
5+
// Напиши код, который считает общую стоимость всей корзины.
6+
// Условие: Используй тот способ итерации, который наиболее логичен и "чист" в ситуации, когда нам вообще не важны названия продуктов (ключи), а нужны только цифры.
7+
8+
const cart = new Map([
9+
['Apple', 1.5],
10+
['Banana', 0.8],
11+
['Milk', 2.0],
12+
['Bread', 1.2],
13+
]);
14+
15+
// const cartSum = [...cart.values()].reduce((acc, price) => acc + price, 0);
16+
17+
// ?? альтернативное решение (проще.. но быстрее, т.к. без создания доп. массива)
18+
let cartSum = 0;
19+
20+
for (const price of cart.values()) {
21+
cartSum += price;
22+
}
23+
24+
console.log(cartSum); // 5.5
25+
26+
// !! Задание 2:
27+
// У нас есть статистика посещений сайта пользователями. Ключ — это объект пользователя, Значение — количество посещений.
28+
// Напиши цикл for...of, который выведет в консоль фразы вида: User Alex visited 5 times, User Ivan visited 10 times
29+
// Челендж (по желанию): Попробуй сделать деструктуризацию максимально глубокой прямо в объявлении цикла, чтобы внутри цикла не писать key.name, а обращаться к имени напрямую через переменную name.
30+
31+
const user1 = { name: 'Alex', id: 1 };
32+
const user2 = { name: 'Ivan', id: 2 };
33+
34+
const visits = new Map([
35+
[user1, 5],
36+
[user2, 10],
37+
]);
38+
39+
for (const [{ name }, numOfVisits] of visits) {
40+
console.log(`User ${name} visited ${numOfVisits} times`); // "User Alex visited 5 times", "User Ivan visited 10 times"
41+
}
42+
43+
// Задание 3:
44+
// У нас есть складской учет. Map хранит название товара и его остаток на складе.
45+
// Нам нужно получить простой массив (Array) названий товаров, которые закончились (количество равно 0). Ожидаемый результат: ['Shirt', 'Hat'].
46+
// Подсказка: Подумай, какой тип итерации (ключи, значения или пары) тебе нужен, чтобы проверить условие и сохранить результат.
47+
48+
const inventory = new Map([
49+
['Socks', 10],
50+
['Shirt', 0],
51+
['Pants', 5],
52+
['Hat', 0],
53+
]);
54+
55+
// const outOfStock = [];
56+
//
57+
// for (const [key, value] of inventory) {
58+
// if (value === 0) {
59+
// outOfStock.push(key);
60+
// }
61+
// }
62+
63+
// ?? альтернативное решение (современное.. функциональное)
64+
const outOfStock = [...inventory]
65+
.filter(([_, qty]) => qty === 0)
66+
.map(([name]) => name);
67+
68+
console.log(outOfStock); // [ 'Shirt', 'Hat' ]

0 commit comments

Comments
 (0)