Причина в другом.
Во-первых задача (которая поставленна как “что не так с реализацией”) которую тебе нужно решить чисто “механическая”. Для поиска причины падающих тестов достаточно выполнить ряд действий. Именно эти действия и проделают люди которые дадут ответ на твой вопрос. А значит ты можешь проделать эти действия самостоятельно (но не так эффективно как те кто повторял их сотни-тыщи раз):
- Иметь реализацию (она у тебя есть) решения.
- Иметь такой ввод (инпут, входные данные) для которых реализация не возвращает желаемого результата. Это тоже есть: те параметры для которых “падают” тесты
- Пройти по каждому шагу реализации с данными из шага 2 чтобы найти то место которое работает не так как ожидается. Ведь какой-то кусок кода отвечает за то что непохожие объекты посчитались похожими.
Шаг 3 можно делать и через debugger
и через расстановку стратегических console.log
.
По поводу самой реализации.
- Я не вижу кода который бы отвечал за сравнение значений в ключах объекта. Я вижу только сравнения ключей но не значений за ними.
- Скорее всего решение должно быть рекурсивным (следует из названия
deepEqualTes
), так как значения в ключах объекта могут сами содержать объекты.
if (key in keysB) {
return true;
}
Очень похоже что ты имеешь в виду в этих строках что-то типа “если значение в переменной key
включено в массив, то верни true
”. Во-первых вхождение в массив делается не через оператор in
, во вторых этот return
слишком ранний так как он сработает для всей функции, не проверяя других ключей (считай будет достаточно наличия одного ключа в обоих объектах чтобы сравнение на равенство объектоа дало true
, но это же недостаточно условие равенства).
Тебе нужно пересмотреть реализацию с самого начала. В ней есть рабочие элементы (как то сравнение количества ключей), но их недостаточно для рабочего решения.
Общая стратегия для решения (могу упустить нюансы, но надеюсь суть передам):
- На входе функции решения (назовем ее
isDeeplyEqual
- ) два значения. Если это примитивные значения, то функция вернет равенство если они равны. Иначе значения не примитивны (массивы или объекты) - Если непримитивные зачения разного типа, значит они не равны
- Если они одного типа, то
3.1 Для массивов все элементы одного должны быть равны всем элементам второго, для чего используем рекурсивный вызовisDeeplyEqual
с аргументами с одинаковым индексом из каждого из массивов
3.2 Для объектов.
3.2.1. Если количество и значения ключей не совпадает то объекты не равны
3.2.2. Используем рекурсивныйisDeeplyEqual
для сравнения значений под одинаковыми ключами в этих двух объектах.