|
| 1 | +'use strict'; |
| 2 | + |
| 3 | +// Задание 1: |
| 4 | +// Представь, что ты делаешь веб-приложение, в котором пользователь может выбрать тему (светлую или тёмную) и язык интерфейса. Эти настройки нужно сохранять в браузере, чтобы при следующем визите они не сбрасывались. |
| 5 | +// Напиши две функции: |
| 6 | +// 1. saveSettings(settingsObj): Эта функция принимает объект с настройками (например, { theme: 'dark', language: 'ru' }) и сохраняет его в localStorage под ключом appSettings. |
| 7 | +// 2. loadSettings(): Эта функция должна загружать настройки из localStorage, парсить их обратно в объект и возвращать его. Если в localStorage по ключу appSettings ничего нет, функция должна вернуть пустой объект {}. |
| 8 | + |
| 9 | +function saveSettings(settingsObj = {}) { |
| 10 | + localStorage.setItem('appSettings', JSON.stringify(settingsObj)); |
| 11 | +} |
| 12 | + |
| 13 | +saveSettings({}); // {} |
| 14 | +saveSettings({ theme: 'dark', language: 'ru' }); // {"theme":"dark","language":"ru"} |
| 15 | + |
| 16 | +function loadSettings() { |
| 17 | + const storageSettings = JSON.parse(localStorage.getItem('appSettings')); |
| 18 | + |
| 19 | + if (!storageSettings) { |
| 20 | + return {}; |
| 21 | + } |
| 22 | + |
| 23 | + return storageSettings; |
| 24 | +} |
| 25 | + |
| 26 | +const loadResult = loadSettings(); |
| 27 | +console.log(loadResult); // {theme: 'dark', language: 'ru'} |
| 28 | + |
| 29 | +// Задание 2: |
| 30 | +// У тебя есть объект с данными пользователя, который содержит как публичную, так и приватную информацию. |
| 31 | +// Напиши функцию getPublicProfileJSON(userObject), которая принимает такой объект и возвращает его в виде красиво отформатированной JSON-строки (с отступами). Однако в этой строке не должно быть полей email и passwordHash. |
| 32 | +// Подсказка: Вспомни про второй и третий аргументы JSON.stringify(). Они здесь очень пригодятся. |
| 33 | + |
| 34 | +const user = { |
| 35 | + id: 101, |
| 36 | + username: 'admin', |
| 37 | + |
| 38 | + passwordHash: 'a1b2c3d4e5f6...', // Секретный хэш |
| 39 | + lastLogin: new Date(), |
| 40 | + settings: { |
| 41 | + notifications: true, |
| 42 | + theme: 'dark', |
| 43 | + }, |
| 44 | +}; |
| 45 | + |
| 46 | +function getPublicProfileJSON(userObject = {}) { |
| 47 | + return JSON.stringify( |
| 48 | + userObject, |
| 49 | + ['id', 'username', 'lastLogin', 'settings', 'notifications'], |
| 50 | + 2 |
| 51 | + ); |
| 52 | +} |
| 53 | + |
| 54 | +console.log(getPublicProfileJSON(user)); |
| 55 | +/* |
| 56 | +{ |
| 57 | + "id": 101, |
| 58 | + "username": "admin", |
| 59 | + "lastLogin": "2025-09-29T07:28:52.745Z", |
| 60 | + "settings": { |
| 61 | + "notifications": true, |
| 62 | + } |
| 63 | +} |
| 64 | +*/ |
| 65 | + |
| 66 | +// ?? пример продвинутого применения |
| 67 | +function getNewPublicProfileJSON(userObject) { |
| 68 | + const replacer = (key, value) => { |
| 69 | + if (key === 'passwordHash') { |
| 70 | + return undefined; // Это полностью уберёт ключ из JSON |
| 71 | + } |
| 72 | + if (key === 'email') { |
| 73 | + return '[REDACTED]'; // А это - заменит значение |
| 74 | + } |
| 75 | + if (typeof value === 'number') { |
| 76 | + return String(value); // Превратит число в строку |
| 77 | + } |
| 78 | + return value; // Все остальные значения оставляем как есть |
| 79 | + }; |
| 80 | + |
| 81 | + return JSON.stringify(userObject, replacer, 2); |
| 82 | +} |
| 83 | + |
| 84 | +console.log(getNewPublicProfileJSON(user)); |
| 85 | +/* |
| 86 | +{ |
| 87 | + "id": "101", |
| 88 | + "username": "admin", |
| 89 | + "email": "[REDACTED]", |
| 90 | + "lastLogin": "2025-09-29T07:35:05.000Z", |
| 91 | + "settings": { |
| 92 | + "notifications": true, |
| 93 | + "theme": "dark" |
| 94 | + } |
| 95 | +} |
| 96 | +*/ |
0 commit comments