#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