Настройки карты в приложении Альфа-Банка хранятся вложенным объектом, а система аналитики принимает только плоские пары «ключ — значение». Напишите flatten(obj).
Вложенные объекты разворачиваются в ключи через точку: {user: {card: {type: 'debit'}}} → {'user.card.type': 'debit'}. Массивы, null и пустые объекты не разворачиваются — это значения. Порядок ключей — как при обходе в глубину.
В работе: Отправка параметров в аналитику, сравнение настроек, ключи переводов i18n.
Пример 1: три уровня
Аргументы теста
{"user": {"id": 7, "card": {"type": "debit", "cashback": "5%"}}}Ожидается
{"user.id": 7, "user.card.type": "debit", "user.card.cashback": "5%"}Пример 2: массив — значение
Аргументы теста
{"cats": ["АЗС", "Кафе"], "limit": {"month": 5000}}Ожидается
{"cats": ["АЗС", "Кафе"], "limit.month": 5000}
Как проверяем
Объявите
flatten — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 7: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function flatten(obj) // → объект
Источник: на задачах Альфа-Банка: настройки карты и аналитика. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
Стр. 1Ctrl+Enter — запуск · Ctrl+Shift+Enter — отправка
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.