JS — Проверьте глубоко, содержится ли объект в другом объекте

#javascript #typescript #compare #lodash

Вопрос:

Я выполняю глубокое сравнение объектов, полученных из api. Объекты могут содержать практически все, что угодно, но мне нужно убедиться, что один объект содержится в другом. В настоящее время я делаю следующее, чтобы попытаться убедиться в этом, но _.pick() это неглубоко

 let foo = {"key1":{"key2":{"key3":true}}}
let bar = {"key1":{"key2":{"key3":true}, "key4":[1,2,3]}}
let baz = {"key1":{"key2":{"key3":true}}}
let qux = {"key1":{"key2":2}}
let ham = {"key1":{"key2":{"key3":true}}, "key4": [1,2,3]}
let egg = {"key4": [1,2,3]}

const handleCompare = (obj1, obj2) => 
  _.isEqual(
    obj1,
    _.pick(obj2, Object.keys(obj1)),
  );
  
console.log(handleCompare(foo, bar)) //false
console.log(handleCompare(foo, baz)) //true
console.log(handleCompare(foo, qux)) //false
console.log(handleCompare(foo, ham)) //true
console.log(handleCompare(egg, ham)) //true
console.log(handleCompare(egg, foo)) //false 
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script> 

Поэтому мой вопрос заключается в том, как я могу гарантировать, что объект глубоко содержится в другом, где все obj1 должно быть, obj2 но не все obj2 должно быть obj1 ?
используя фрагмент выше, результаты будут:

 console.log(handleCompare(foo, bar)) //true
console.log(handleCompare(foo, baz)) //true
console.log(handleCompare(foo, qux)) //false
console.log(handleCompare(foo, ham)) //true
console.log(handleCompare(egg, ham)) //true
console.log(handleCompare(egg, foo)) //false