Войти Регистрация
Фронтенд

10. Копия черновика платежа с циклическими ссылками

Сложная

В СберБанк Онлайн черновик платежа редактируют в форме, а кнопка «Отмена» возвращает исходный вид. Для этого форма работает с копией. В черновике есть даты, Map с реквизитами и ссылки получателя на сам черновик.

Напишите deepClone(value). Копируются простые объекты, массивы, Date, Map и Set — рекурсивно. Примитивы возвращаются как есть. Если объект встречается в структуре дважды, в копии это тоже один объект. Цикл в исходнике — цикл в копии, без переполнения стека.

В работе: Отмена правок в форме, снимки состояния для undo, изоляция данных между вкладками.

Пример 1: вложенный объект

Аргументы теста
"plain"
Ожидается
{"copy": [1500, "Сбер", 2], "srcName": "Анна", "srcTags": 1}

Пример 2: ссылка на себя

Аргументы теста
"cycle"
Ожидается
{"id": 7, "loop": true, "notOrig": true, "notSame": true}
Как проверяем Объявите deepClone — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 7: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function deepClone(value) // → копия
рекурсияWeakMapструктуры данных

Источник: на задачах Сбера: черновики платежей. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.