Код Senior Jest и Vitest обновлено

Реализовать toMatchObject

Условие

Напишите matchObject(actual, expected), возвращающую true или false по правилам:

  • если expected массив: actual тоже массив той же длины, элементы совпадают попарно по этим же правилам;
  • если expected объект (не null, не массив): actual объект (не null, не массив), и для каждого ключа expected ключ есть в actual и значения совпадают рекурсивно; лишние ключи actual не мешают;
  • иначе сравнение через Object.is.

Примеры

matchObject({"id":1,"name":"A","extra":true}, {"id":1}) // true
matchObject({"id":1}, {"id":2}) // false
matchObject({"user":{"id":1,"role":"admin"}}, {"user":{"role":"admin"}}) // true

Как подойти

Подсказки: 2
  1. Три ветки: массив, объект, примитив.
  2. Проверяйте null отдельно: typeof null тоже object.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.