В СберБанк Онлайн черновик платежа редактируют в форме, а кнопка «Отмена» возвращает исходный вид. Для этого форма работает с копией. В черновике есть даты, 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) // → копия
Источник: на задачах Сбера: черновики платежей. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
Стр. 1Ctrl+Enter — запуск · Ctrl+Shift+Enter — отправка
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.