Реализуйте deepCopy(value) — функцию глубокого копирования. Изменение клона не должно затрагивать оригинал, и наоборот.
const obj = { user: { role: 'admin' } };
const copy = deepCopy(obj);
copy.user.role = 'guest';
obj.user.role; // 'admin' — оригинал не изменился
const obj2 = { foo: [{ bar: 'baz' }] };
const copy2 = deepCopy(obj2);
obj2.foo[0].bar = 'bax';
copy2.foo[0].bar; // 'baz' — копия не изменилась
Ограничения: входные данные — примитивы, null, plain objects и массивы. Циклических ссылок, Date, Map, Set не будет.
Одна из самых частых задач на собеседованиях — проверяет рекурсию, определение типов и обход объектов. Ждут рекурсивное решение. JSON.parse(JSON.stringify(...)) и structuredClone() обычно не засчитывают — их упоминают как "есть в продакшене, но не подходит здесь".