Files
30-seconds-of-code/snippets/matchesWith.md
30secondsofcode 667b871621 Travis build: 1346
2018-01-23 18:18:38 +00:00

26 lines
863 B
Markdown

### matchesWith
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.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
```