Skip to content

Commit 1f87593

Browse files
committed
[LES-13.8/st-compl] obj-iteration
Practice with "Object.keys/values/entries/fromEntries()" meth's. Worth noting: - all this lesson/practice (note the solutions). FS-dev: B-3 / JS basic
1 parent 0c26414 commit 1f87593

File tree

1 file changed

+89
-0
lines changed
  • full-stack-dev/3-js-basic/13-objects/13-8-obj-iteration

1 file changed

+89
-0
lines changed
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
// Задание 1:
2+
// У вас есть объект, в котором хранятся результаты тестов.
3+
// Напишите код, который посчитает сумму баллов только по тем предметам, где указан числовой результат. Игнорируйте строковые значения ('passed', 'failed').
4+
// Подсказка: Подумайте, какой метод (Object.keys, Object.values или Object.entries) здесь будет наиболее удобен.
5+
6+
const testResults = {
7+
math: 95,
8+
literature: 88,
9+
physics: 'passed', // Обратите внимание, не все значения - числа
10+
chemistry: 91,
11+
biology: 'failed',
12+
history: 75,
13+
};
14+
15+
function getResultsSum(resultsObj = {}) {
16+
if (Object.keys(resultsObj).length === 0) {
17+
return false;
18+
}
19+
20+
let resultSum = 0;
21+
22+
for (const result of Object.values(resultsObj)) {
23+
if (typeof result === 'number') {
24+
resultSum += result;
25+
}
26+
}
27+
28+
return resultSum;
29+
}
30+
31+
console.log(getResultsSum(testResults)); // 349
32+
33+
// ?? альтернативное решение
34+
function getNewResultsSum(resultsObj = {}) {
35+
if (Object.keys(resultsObj).length === 0) {
36+
return false;
37+
}
38+
39+
return Object.values(resultsObj)
40+
.filter((result) => typeof result === 'number')
41+
.reduce((acc, result) => (acc += result), 0);
42+
}
43+
44+
console.log(getNewResultsSum(testResults)); // 349
45+
46+
// Задание 2:
47+
// У вас есть объект с настройками пользователя.
48+
// Нужно создать новый объект, который будет содержать только "публичные" настройки. Скопируйте в новый объект все свойства из userSettings, кроме тех, чьи ключи начинаются с символа подчеркивания _.
49+
// Подсказка: Здесь вам понадобятся и ключ, и значение. Какой метод для этого подходит лучше всего? Возможно, после получения пар [ключ, значение] вам понадобится метод Object.fromEntries(), чтобы собрать из них новый объект.
50+
51+
const userSettings = {
52+
theme: 'dark',
53+
fontSize: 16,
54+
showAvatars: true,
55+
lastLogin: '2025-08-29',
56+
_internalId: 'xyz-123-abc', // "приватное" свойство
57+
};
58+
59+
const returnNewObj = Object.fromEntries(
60+
Object.entries(userSettings).filter(([key]) => !key.startsWith('_'))
61+
);
62+
63+
console.log(returnNewObj); // { theme: 'dark', fontSize: 16, showAvatars: true, lastLogin: '2025-08-29' }
64+
65+
// Задание 3:
66+
// У вас есть объект, который сопоставляет названия ролей с ID пользователей.
67+
// Создайте новый объект roleIds, который будет "перевёрнутой" версией userRoles. То есть, ключами должны стать ID пользователей, а значениями — названия ролей.
68+
// Важное условие: В новый объект должны попасть только активные роли (те, у которых ID пользователя не null).
69+
// Ожидаемый результат:
70+
// {
71+
// user_1: 'admin',
72+
// user_2: 'editor',
73+
// user_3: 'viewer'
74+
// }
75+
76+
const userRoles = {
77+
admin: 'user_1',
78+
editor: 'user_2',
79+
viewer: 'user_3',
80+
moderator: null, // Эта роль неактивна
81+
};
82+
83+
const roleIds = Object.fromEntries(
84+
Object.entries(userRoles)
85+
.filter(([_, value]) => value !== null)
86+
.map(([key, value]) => [value, key])
87+
);
88+
89+
console.log(roleIds); // { user_1: 'admin', user_2: 'editor', user_3: 'viewer' }

0 commit comments

Comments
 (0)