Files
30-seconds-of-code/snippets/matchesWith.md
2020-09-15 21:52:00 +03:00

27 lines
916 B
Markdown

---
title: matchesWith
tags: object,type,function,intermediate
---
Compares two objects to determine if the first one contains equivalent property values to the second one, based on a provided function.
- Use `Object.keys(source)` to get all the keys of the second object, then `Array.prototype.every()`, `Object.hasOwnProperty()` and the provided function to determine if all keys exist in the first object and have equivalent values.
- If no function is provided, the values will be compared using the equality operator.
```js
const matchesWith = (obj, source, fn) =>
Object.keys(source).every(key =>
obj.hasOwnProperty(key) && fn
? fn(obj[key], source[key], key, obj, source)
: obj[key] == source[key]
);
```
```js
const isGreeting = val => /^h(?:i|ello)$/.test(val);
matchesWith(
{ greeting: 'hello' },
{ greeting: 'hi' },
(oV, sV) => isGreeting(oV) && isGreeting(sV)
); // true
```