Форма перевода в Т‑Банке хранит черновик: дату платежа (Date), лимиты по валютам (Map), выбранные карты (Set) и ссылку на родительский шаблон, который ссылается обратно. Кнопка «Сохранить» активна, только если черновик отличается от сохранённого снимка.
Напишите deepEqual(a, b). Примитивы равны по SameValueZero: NaN равен NaN, 0 равен -0. У объектов должен совпадать прототип: Map не равен объекту, массив не равен объекту с ключами 0, 1. Date равны, если совпадает время.
Map равны, если одинаковый размер и по каждому ключу (ключи — примитивы) значения глубоко равны; порядок вставки не важен. Set из примитивов равны, если состав одинаковый. Простые объекты и массивы — по собственным перечислимым ключам.
В данных бывают циклы: объект ссылается сам на себя. Функция должна завершиться и ответить верно.
В работе: Грязная форма и кнопка «Сохранить», пропуск лишних ререндеров, тесты снимков стейта.
Пример 1: одинаковая дата платежа
{"$date": "2026-10-21T10:00:00Z"}, {"$date": "2026-10-21T10:00:00Z"}true
Пример 2: разные даты
{"date": {"$date": "2026-10-21T10:00:00Z"}}, {"date": {"$date": "2026-10-22T10:00:00Z"}}false
deepEqual — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 13: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function deepEqual(a, b) // → boolean
Источник: на задачах Т‑Банка: черновик перевода. Условие пересказано своими словами.
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.