|
| 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