Классический "затык" в рекурсии.
Функция
deepEqual
возвращает отсортированный объект.
А здесь куда девается возвращаемое значение (вложенный объект)?
if (typeof key === "object") {
deepEqual(key)
}
Никуда. Он сортируется в следующих уровнях рекурсии, но назад не возвращается.
Полагаю, должно быть так:
if (typeof key === "object") {
obj[key] = deepEqual(key)
}
UPD
И вообще, for..in перебирает ключи объекта, а не их значения!
Навскидку:
obj = Object.fromEntries(sort);
for (let key in obj) {
if (!obj.hasOwnProperty(key)) continue;
let subObj = obj[key];
if (typeof subObj === "object") {
obj[key] = deepEqual(subObj)
}
};