I'm trying to compare two objects with underscore.
Object 1 (Filter)
{
"tuxedoorsuit":"tuxedoorsuit-tuxedo",
"occasions":"occasions-wedding"
}
Object 2 (Properties)
{
"tuxedoorsuit":"tuxedoorsuit-tuxedo",
"occasions":"occasions-wedding",
"occasions":"occasions-prom",
"product_fit":"product_fit-slim",
"colorfamily":"colorfamily-black"
}
I want to return true when all items of Object 1 are found within Object 2. What would be the best underscore method to use for this?
Edit: As per Arnaldo's comment, you can use isMatch
function, like this
console.log(_.isMatch(object2, object1));
The description says,
_.isMatch(object, properties)
Tells you if the keys and values in properties are contained in object.
If you want to iterate yourself, just use _.keys
and _.every
, like this
_.every(_.keys(object1), function(currentKey) {
return _.has(object2, currentKey) &&
_.isEqual(object1[currentKey], object2[currentKey]);
});
Or the chained version,
var result = _.chain(object1)
.keys()
.every(function(currentKey) {
return _.has(object2, currentKey) &&
_.isEqual(object1[currentKey], object2[currentKey]);
})
.value();
If the result is true
, it means that all the keys in object1
are in object2
and their values are also equal.
This basically iterates through all the keys of object1
and checks if the value corresponding to the key in object1
is equal to the value in object2
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With