The above answer using lodash has a limitation and does not apply to all edge case scenarios. I just came up with this solution that fits all scenarios
import _ from 'lodash'; isSubset(obj1, obj2) { let matched = true; _.forEach(obj1, (value, key) => { if(!requirements || !_.isEqual(value, obj2[key])) { matched = false; return; } }); return matched; }
Case 1:
const obj1 = { foo: 'bar' }; const obj2 = { foo: 'bar', baz: 'qux' }; console.log(isSubset(obj1, obj2));
Case 2:
const obj1 = { foo: 'bar' }; const obj2 = { foo: 'bar' }; console.log(isSubset(obj1, obj2));
Case 3:
const obj1 = { foo: 'bar', baz: 'qux' }; const obj2 = { foo: 'bar'}; console.log(isSubset(obj1, obj2));
Case 4:
const obj1 = undefiend; const obj2 = undefiend; console.log(isSubset(obj1, obj2));
Case 5:
const obj1 = undefiend; const obj2 = { foo: 'bar'}; console.log(isSubset(obj1, obj2));
Case 6:
const obj1 = { foo: 'bar'}; const obj2 = undefiend; console.log(isSubset(obj1, obj2));
source share